• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.file.fileAccess (公共文件访问与管理)(系统接口)
2
3fileAccess模块是基于[extension](../../application-models/extensionability-overview.md)机制实现的一个对公共文件访问和操作的框架。该模块一方面对接各类文件管理服务,如存储管理服务等,另一方面为系统应用提供一套统一的文件访问管理接口。存储管理服务可以管理内置存储部分目录,以及共享盘、U盘、SD卡等设备上的资源。
4
5>**说明:**
6>
7> - 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
8> - 本模块为系统接口。
9> - 当前只支持FilePicker、文件管理器调用。
10
11## 导入模块
12
13```ts
14import fileAccess from '@ohos.file.fileAccess';
15```
16
17## 常量
18
19表示用于监听设备上线和下线通知的URI,用作注册监听的URI。
20
21**模型约束**:仅可在Stage模型下使用。
22
23**系统能力**:SystemCapability.FileManagement.UserFileService24
25**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
26
27| 名称 | 类型                        | 可读 | 可写 | 说明                                                      |
28| ---- | --------------------------- | ---- | ---- | --------------------------------------------------------- |
29| DEVICES_URI<sup>11+</sup>  | string | 是   | 否   | 监听设备上线,下线通知,作为注册监听的URI                    |
30
31## fileAccess.getFileAccessAbilityInfo
32
33getFileAccessAbilityInfo() : Promise&lt;Array&lt;Want&gt;&gt;
34
35以异步方法获取系统内extension配置为fileAccess类型的所有Want信息。使用Promise异步回调。
36
37**模型约束**:此接口仅可在Stage模型下使用。
38
39**系统能力**:SystemCapability.FileManagement.UserFileService
40
41**需要权限**:ohos.permission.FILE_ACCESS_MANAGERohos.permission.GET_BUNDLE_INFO_PRIVILEGED
42
43**返回值:**
44
45| 类型 | 说明 |
46| --- | -- |
47| Promise&lt;Array&lt;[Want](../apis-ability-kit/js-apis-app-ability-want.md)&gt;&gt; | 表示当前系统配置fileAccess的所有文件管理类服务 |
48
49**错误码:**
50
51接口抛出错误码的详细介绍请参见[文件管理错误码](errorcode-filemanagement.md)。
52
53**示例:**
54
55  ```ts
56  import { BusinessError } from '@ohos.base';
57  import Want from '@ohos.app.ability.Want';
58  async function getFileAccessAbilityInfo() {
59    let wantInfos: Array<Want> = [];
60    try {
61      wantInfos = await fileAccess.getFileAccessAbilityInfo();
62      console.log("getFileAccessAbilityInfo data " + JSON.stringify(wantInfos));
63    } catch (err) {
64      let error: BusinessError = err as BusinessError;
65      console.error("getFileAccessAbilityInfo failed, errCode:" + error.code + ", errMessage:" + error.message);
66    }
67  }
68  ```
69
70## fileAccess.getFileAccessAbilityInfo
71
72getFileAccessAbilityInfo(callback: AsyncCallback&lt;Array&lt;Want&gt;&gt;): void
73
74以异步方法获取系统内extension配置为fileAccess类型的所有Want信息。使用callback异步回调。
75
76**模型约束**:此接口仅可在Stage模型下使用。
77
78**系统能力**:SystemCapability.FileManagement.UserFileService
79
80**需要权限**:ohos.permission.FILE_ACCESS_MANAGERohos.permission.GET_BUNDLE_INFO_PRIVILEGED
81
82**参数:**
83
84| 参数名 | 类型 | 必填 | 说明 |
85| --- | --- | --- | -- |
86| callback | AsyncCallback&lt;Array&lt;[Want](../apis-ability-kit/js-apis-app-ability-want.md)&gt;&gt; | 是 | 表示当前系统配置fileAccess的所有文件管理类服务 |
87
88**错误码:**
89
90接口抛出错误码的详细介绍请参见[文件管理错误码](errorcode-filemanagement.md)。
91
92**示例:**
93
94  ```ts
95  import { BusinessError } from '@ohos.base';
96  import Want from '@ohos.app.ability.Want';
97  async function getFileAccessAbilityInfo() {
98    try {
99      fileAccess.getFileAccessAbilityInfo((err: BusinessError, wantInfos: Array<Want>) => {
100        if (err) {
101          console.error("Failed to getFileAccessAbilityInfo in async, errCode:" + err.code + ", errMessage:" + err.message);
102          return;
103        }
104        console.log("getFileAccessAbilityInfo data " + JSON.stringify(wantInfos));
105      });
106    } catch (err) {
107      let error: BusinessError = err as BusinessError;
108      console.error("getFileAccessAbilityInfo failed, errCode:" + error.code + ", errMessage:" + error.message);
109    }
110  }
111  ```
112
113## fileAccess.createFileAccessHelper
114
115createFileAccessHelper(context: Context, wants: Array&lt;Want&gt;) : FileAccessHelper
116
117以同步方法创建连接指定wants的helper对象。
118
119**模型约束**:此接口仅可在Stage模型下使用。
120
121**系统能力**:SystemCapability.FileManagement.UserFileService
122
123**需要权限**:ohos.permission.FILE_ACCESS_MANAGERohos.permission.GET_BUNDLE_INFO_PRIVILEGED
124
125**参数:**
126
127| 参数名 | 类型 | 必填 | 说明 |
128| --- | --- | --- | -- |
129| context | [Context](../apis-ability-kit/js-apis-inner-application-context.md) | 是 | 代表ability的上下文的能力 |
130| wants | Array&lt;[Want](../apis-ability-kit/js-apis-app-ability-want.md)&gt; | 是 | Want是一种基本通信组件,主要用于服务拉起 |
131
132**返回值:**
133
134| 类型 | 说明 |
135| --- | -- |
136| [FileAccessHelper](#fileaccesshelper) | 提供文件访问和操作能力的helper对象 |
137
138**错误码:**
139
140接口抛出错误码的详细介绍请参见[文件管理错误码](errorcode-filemanagement.md)。
141
142**示例:**
143
144  ```ts
145  import { BusinessError } from '@ohos.base';
146  import Want from '@ohos.app.ability.Want';
147  import common from '@ohos.app.ability.common';
148  let context = getContext(this) as common.UIAbilityContext;
149  function createFileAccessHelper01() {
150    let fileAccessHelper: fileAccess.FileAccessHelper;
151    // wantInfos 从getFileAccessAbilityInfo()获取
152    let wantInfos: Array<Want> = [
153      {
154        bundleName: "com.ohos.UserFile.ExternalFileManager",
155        abilityName: "FileExtensionAbility",
156      },
157    ]
158    try {
159      // context 是EntryAbility 传过来的context
160      fileAccessHelper = fileAccess.createFileAccessHelper(context, wantInfos);
161      if (!fileAccessHelper) {
162        console.error("createFileAccessHelper interface returns an undefined object");
163      }
164    } catch (err) {
165      let error: BusinessError = err as BusinessError;
166      console.error("createFileAccessHelper failed, errCode:" + error.code + ", errMessage:" + error.message);
167    }
168  }
169  ```
170
171## fileAccess.createFileAccessHelper
172
173createFileAccessHelper(context: Context) : FileAccessHelper
174
175以同步方法创建连接当前系统内所有文件管理服务的helper对象。
176
177**模型约束**:此接口仅可在Stage模型下使用。
178
179**系统能力**:SystemCapability.FileManagement.UserFileService
180
181**需要权限**:ohos.permission.FILE_ACCESS_MANAGERohos.permission.GET_BUNDLE_INFO_PRIVILEGED
182
183**参数:**
184
185| 参数名 | 类型 | 必填 | 说明 |
186| --- | --- | --- | -- |
187| context | [Context](../apis-ability-kit/js-apis-inner-application-context.md) | 是 | ability的上下文的能力 |
188
189**返回值:**
190
191| 类型 | 说明 |
192| --- | -- |
193| [FileAccessHelper](#fileaccesshelper) | 提供文件访问和操作的能力的helper对象 |
194
195**错误码:**
196
197接口抛出错误码的详细介绍请参见[文件管理错误码](errorcode-filemanagement.md)。
198
199**示例:**
200
201  ```ts
202  import { BusinessError } from '@ohos.base';
203  import common from '@ohos.app.ability.common';
204  let context = getContext(this) as common.UIAbilityContext;
205  function createFileAccessHelper02() {
206    let fileAccessHelperAllServer: fileAccess.FileAccessHelper;
207    // 创建连接系统内所有配置fileAccess的文件管理类服务的helper对象
208    try {
209      // context 是EntryAbility 传过来的context
210      fileAccessHelperAllServer = fileAccess.createFileAccessHelper(context);
211      if (!fileAccessHelperAllServer) {
212        console.error("createFileAccessHelper interface returns an undefined object");
213      }
214    } catch (err) {
215      let error: BusinessError = err as BusinessError;
216      console.error("createFileAccessHelper failed, errCode:" + error.code + ", errMessage:" + error.message);
217    }
218  }
219  ```
220
221## FileInfo
222
223表示文件(夹)属性信息和接口能力。
224
225**模型约束**:此接口仅可在Stage模型下使用。
226
227**系统能力**:SystemCapability.FileManagement.UserFileService
228
229**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
230
231### 属性
232
233| 名称 | 类型   | 可读 | 可写 | 说明     |
234| ------ | ------ | -------- | ------ | -------- |
235| uri | string | 是 | 否 | 文件(夹)的uri |
236| relativePath<sup>10+</sup> | string | 是 | 否 | 文件(夹)的相对路径 |
237| fileName | string | 是 | 否 | 文件(夹)的名称 |
238| mode | number | 是 | 否 | 文件(夹)的权限信息 |
239| size | number | 是 | 否 |  文件(夹)的大小 |
240| mtime | number | 是 | 否 |  文件(夹)的修改时间 |
241| mimeType | string | 是 | 否 |  文件(夹)的媒体资源类型 |
242
243### listFile
244
245listFile(filter?: Filter) : FileIterator
246
247以同步方法从某个目录,基于过滤器,获取下一级符合条件的文件(夹)信息的迭代器对象FileIterator,然后通过[next](#next)方法返回[FileInfo](#fileinfo)。目前仅支持内置存储设备过滤,外置存储设备不支持过滤。
248
249**模型约束**:此接口仅可在Stage模型下使用。
250
251**系统能力**:SystemCapability.FileManagement.UserFileService
252
253**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
254
255**参数:**
256
257| 参数名 | 类型 | 必填 | 说明 |
258| --- | --- | -- | -- |
259| filter | [Filter](js-apis-file-fs.md#filter) | 否 | 过滤器对象  |
260
261**返回值:**
262
263| 类型 | 说明 |
264| --- | -- |
265| [FileIterator](#fileiterator) | 文件(夹)信息的迭代器对象FileIterator |
266
267**错误码:**
268
269接口抛出错误码的详细介绍请参见[文件管理错误码](errorcode-filemanagement.md)。
270
271**示例:**
272
273  ```ts
274  import { BusinessError } from '@ohos.base';
275  // fileInfoDir 表示某个目录信息
276  // let filter = { suffix : [".txt", ".jpg", ".xlsx"] };
277  let fileInfoDir: fileAccess.FileInfo; // = fileInfos[0];
278  let subfileInfos: Array<fileAccess.FileInfo> = [];
279  let isDone: boolean = false;
280  try {
281    let fileIterator = fileInfoDir.listFile();
282    // 含过滤器实现的listFile
283    // let fileIterator = fileInfoDir.listFile(filter);
284    if (!fileIterator) {
285      console.error("listFile interface returns an undefined object");
286    }
287    while (!isDone) {
288      let result = fileIterator.next();
289      console.log("next result = " + JSON.stringify(result));
290      isDone = result.done;
291      if (!isDone) {
292        subfileInfos.push(result.value);
293      }
294    }
295  } catch (err) {
296    let error: BusinessError = err as BusinessError;
297    console.error("listFile failed, errCode:" + error.code + ", errMessage:" + error.message);
298  }
299  ```
300
301### scanFile
302
303scanFile(filter?: Filter) : FileIterator;
304
305以同步方法从某个目录,基于过滤器,递归获取符合条件的文件信息的迭代器对象FileIterator,然后通过[next](#next)方法返回[FileInfo](#fileinfo)。目前仅支持内置存储设备。
306
307**模型约束**:此接口仅可在Stage模型下使用。
308
309**系统能力**:SystemCapability.FileManagement.UserFileService
310
311**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
312
313**参数:**
314
315| 参数名 | 类型 | 必填 | 说明 |
316| --- | --- | -- | -- |
317| filter | [Filter](js-apis-file-fs.md#filter) | 否 | 过滤器对象  |
318
319**返回值:**
320
321| 类型 | 说明 |
322| --- | -- |
323| [FileIterator](#fileiterator) | 文件信息的迭代器对象FileIterator |
324
325**错误码:**
326
327接口抛出错误码的详细介绍请参见[文件管理错误码](errorcode-filemanagement.md)。
328
329**示例:**
330
331  ```ts
332  import { BusinessError } from '@ohos.base';
333  // fileInfoDir 表示某个目录信息
334  // let filter = {suffix : [".txt", ".jpg", ".xlsx"]};
335  let fileInfoDir: fileAccess.FileInfo; // = fileInfos[0];
336  let subfileInfos: Array<fileAccess.FileInfo> = [];
337  let isDone: boolean = false;
338  try {
339    let fileIterator = fileInfoDir.scanFile();
340    // 含过滤器实现的scanFile
341    // let fileIterator = fileInfoDir.scanFile(filter);
342    if (!fileIterator) {
343      console.error("scanFile interface returns an undefined object");
344    }
345    while (!isDone) {
346      let result = fileIterator.next();
347      console.log("next result = " + JSON.stringify(result));
348      isDone = result.done;
349      if (!isDone) {
350        subfileInfos.push(result.value);
351      }
352    }
353  } catch (err) {
354    let error: BusinessError = err as BusinessError;
355    console.error("scanFile failed, errCode:" + error.code + ", errMessage:" + error.message);
356  }
357  ```
358
359## FileIterator
360
361表示文件夹的迭代器对象。
362
363**模型约束**:此接口仅可在Stage模型下使用。
364
365**系统能力**:SystemCapability.FileManagement.UserFileService
366
367**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
368
369### next
370
371next() : { value: FileInfo, done: boolean }
372
373可以通过next同步方法获取下一级文件(夹)信息。
374
375**模型约束**:此接口仅可在Stage模型下使用。
376
377**系统能力**:SystemCapability.FileManagement.UserFileService
378
379**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
380
381**返回值:**
382
383| 类型 | 说明 |
384| --- | -- |
385| {value: [FileInfo](#fileinfo), done: boolean} | 通过next遍历文件夹,直到done返回true结束;value字段返回fileInfo。|
386
387**错误码:**
388
389接口抛出错误码的详细介绍请参见[文件管理错误码](errorcode-filemanagement.md)。
390
391## RootInfo
392
393表示设备的根属性信息和接口能力。
394
395**模型约束**:此接口仅可在Stage模型下使用。
396
397**系统能力**:SystemCapability.FileManagement.UserFileService
398
399**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
400
401### 属性
402
403| 名称 | 类型   | 可读 | 可写 | 说明     |
404| ------ | ------ | -------- | ------ | -------- |
405| deviceType | number | 是 | 否 |设备类型 |
406| uri | string | 是 | 否 | 设备根目录Uri |
407| relativePath<sup>10+</sup> | string | 是 | 否 | 根目录的相对路径 |
408| displayName | string | 是 | 否 | 设备名称 |
409| deviceFlags | number | 是 | 否 | 设备支持的能力 |
410
411### listFile
412
413listFile(filter?: Filter) : FileIterator
414
415以同步方法从某设备根节点开始,基于过滤器,获取第一级符合条件的文件(夹)信息的迭代器对象FileIterator,然后通过[next](#next)方法返回[FileInfo](#fileinfo)。目前仅支持内置存储设备过滤,外置存储设备不支持过滤。
416
417**模型约束**:此接口仅可在Stage模型下使用。
418
419**系统能力**:SystemCapability.FileManagement.UserFileService
420
421**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
422
423**参数:**
424
425| 参数名 | 类型 | 必填 | 说明 |
426| --- | --- | -- | -- |
427| filter | [Filter](js-apis-file-fs.md#filter) | 否 | 过滤器对象  |
428
429**返回值:**
430
431| 类型 | 说明 |
432| --- | -- |
433| [FileIterator](#fileiterator) | 文件(夹)信息的迭代器对象FileIterator |
434
435**错误码:**
436
437接口抛出错误码的详细介绍请参见[文件管理错误码](errorcode-filemanagement.md)。
438
439**示例:**
440
441  ```ts
442  import { BusinessError } from '@ohos.base';
443  // rootinfos 从getRoots()获取
444  // let filter = {suffix : [".txt", ".jpg", ".xlsx"]};
445  let rootInfo: fileAccess.RootInfo; // = rootinfos[0];
446  let fileInfos: Array<fileAccess.FileInfo> = [];
447  let isDone: boolean = false;
448  try {
449    let fileIterator = rootInfo.listFile();
450    // 含过滤器实现的listFile
451    // let fileIterator = rootInfo.listFile(filter);
452    if (!fileIterator) {
453      console.error("listFile interface returns an undefined object");
454    }
455    while (!isDone) {
456      let result = fileIterator.next();
457      console.log("next result = " + JSON.stringify(result));
458      isDone = result.done;
459      if (!isDone) {
460        fileInfos.push(result.value);
461      }
462    }
463  } catch (err) {
464    let error: BusinessError = err as BusinessError;
465    console.error("listFile failed, errCode:" + error.code + ", errMessage:" + error.message);
466  }
467  ```
468
469### scanFile
470
471scanFile(filter?: Filter) : FileIterator
472
473以同步方法从某设备根节点开始,基于过滤器,递归获取符合条件的文件信息的迭代器对象FileIterator,然后通过[next](#next)方法返回[FileInfo](#fileinfo)。目前仅支持内置存储设备。
474
475**模型约束**:此接口仅可在Stage模型下使用。
476
477**系统能力**:SystemCapability.FileManagement.UserFileService
478
479**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
480
481**参数:**
482
483| 参数名 | 类型 | 必填 | 说明 |
484| --- | --- | -- | -- |
485| filter | [Filter](js-apis-file-fs.md#filter) | 否 | 过滤器对象  |
486
487**返回值:**
488
489| 类型 | 说明 |
490| --- | -- |
491| [FileIterator](#fileiterator) | 文件信息的迭代器对象FileIterator |
492
493**错误码:**
494
495接口抛出错误码的详细介绍请参见[文件管理错误码](errorcode-filemanagement.md)。
496
497**示例:**
498
499  ```ts
500  import { BusinessError } from '@ohos.base';
501  // rootInfos 从 getRoots()获取
502  // let filter = {suffix : [".txt", ".jpg", ".xlsx"]};
503  let rootInfo: fileAccess.RootInfo; // = rootinfos[0];
504  let fileInfos: Array<fileAccess.FileInfo> = [];
505  let isDone: boolean = false;
506  try {
507    let fileIterator = rootInfo.scanFile();
508    // 含过滤器实现的scanFile
509    // let fileIterator = rootInfo.scanFile(filter);
510    if (!fileIterator) {
511      console.error("scanFile interface returns undefined object");
512    }
513    while (!isDone) {
514      let result = fileIterator.next();
515      console.log("next result = " + JSON.stringify(result));
516      isDone = result.done;
517      if (!isDone) {
518        fileInfos.push(result.value);
519      }
520    }
521  } catch (err) {
522    let error: BusinessError = err as BusinessError;
523    console.error("scanFile failed, errCode:" + error.code + ", errMessage:" + error.message);
524  }
525  ```
526
527## RootIterator
528
529表示设备根目录的迭代器对象。
530
531**模型约束**:此接口仅可在Stage模型下使用。
532
533**系统能力**:SystemCapability.FileManagement.UserFileService
534
535**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
536
537### next
538
539next() : { value: RootInfo, done: boolean }
540
541通过next同步方法获取下一级设备根目录。
542
543**模型约束**:此接口仅可在Stage模型下使用。
544
545**系统能力**:SystemCapability.FileManagement.UserFileService
546
547**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
548
549**返回值:**
550
551| 类型 | 说明 |
552| --- | -- |
553| {value: [RootInfo](#rootinfo), done: boolean} | 通过next遍历文件夹,直到done返回true结束;value字段返回rootInfo。|
554
555**错误码:**
556
557接口抛出错误码的详细介绍请参见[文件管理错误码](errorcode-filemanagement.md)。
558
559## FileAccessHelper
560
561FileAccessHelper对象。
562
563**系统能力**:SystemCapability.FileManagement.UserFileService
564
565**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
566
567### getRoots
568
569getRoots() : Promise&lt;RootIterator&gt;
570
571以异步方法获取helper对象连接的文件管理服务类的设备根节点信息。使用Promise异步回调。
572该方法返回迭代器对象RootIterator,然后通过[next](#next-1)方法返回[RootInfo](#rootinfo)。
573
574**系统能力**:SystemCapability.FileManagement.UserFileService
575
576**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
577
578**返回值:**
579
580| 类型 | 说明 |
581| --- | -- |
582| Promise&lt;[RootIterator](#rootiterator)&gt; | 根设备目录信息组成迭代器对象 |
583
584**错误码:**
585
586接口抛出错误码的详细介绍请参见[文件管理错误码](errorcode-filemanagement.md)。
587
588**示例:**
589
590  ```ts
591async function getRoots() {
592  let rootIterator: fileAccess.RootIterator;
593  let rootinfos: Array<fileAccess.RootInfo> = [];
594  let isDone: boolean = false;
595  try {
596    // fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取
597    rootIterator = await fileAccessHelper.getRoots();
598    if (!rootIterator) {
599      console.error("getRoots interface returns an undefined object");
600    }
601    while (!isDone) {
602      let result = rootIterator.next();
603      console.log("next result = " + JSON.stringify(result));
604      isDone = result.done;
605      if (!isDone) {
606        rootinfos.push(result.value);
607      }
608    }
609  } catch (err) {
610    let error: BusinessError = err as BusinessError;
611    console.error("getRoots failed, errCode:" + error.code + ", errMessage:" + error.message);
612  }
613}
614  ```
615
616### getRoots
617
618getRoots(callback:AsyncCallback&lt;RootIterator&gt;) : void
619
620以异步方法获取helper对象连接的文件管理服务类的设备根节点信息。使用callback异步回调。
621callback带回迭代器对象RootIterator,然后通过[next](#next-1)方法返回[RootInfo](#rootinfo)。
622
623**系统能力**:SystemCapability.FileManagement.UserFileService
624
625**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
626
627**参数:**
628
629| 参数名 | 类型 | 必填 | 说明 |
630| --- | --- | --- | -- |
631| callback | AsyncCallback&lt;[RootIterator](#rootiterator)&gt; | 是 | 根设备目录信息组成迭代器对象 |
632
633**错误码:**
634
635接口抛出错误码的详细介绍请参见[文件管理错误码](errorcode-filemanagement.md)。
636
637**示例:**
638
639  ```ts
640  import { BusinessError } from '@ohos.base';
641  async function getRoots() {
642    let rootinfos: Array<fileAccess.RootInfo> = [];
643    let isDone: boolean = false;
644    try {
645      // fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取
646      fileAccessHelper.getRoots((err: BusinessError, rootIterator: fileAccess.RootIterator) => {
647        if (err) {
648          console.error("Failed to getRoots in async, errCode:" + err.code + ", errMessage:" + err.message);
649        }
650        while (!isDone) {
651          let result = rootIterator.next();
652          console.log("next result = " + JSON.stringify(result));
653          isDone = result.done;
654          if (!isDone) {
655            rootinfos.push(result.value);
656          }
657        }
658      });
659    } catch (err) {
660      let error: BusinessError = err as BusinessError;
661      console.error("getRoots failed, errCode:" + error.code + ", errMessage:" + error.message);
662    }
663  }
664  ```
665
666### createFile
667
668createFile(uri: string, displayName: string) : Promise&lt;string&gt;
669
670以异步方法创建文件到指定目录,返回新文件uri。使用Promise异步回调。
671
672**系统能力**:SystemCapability.FileManagement.UserFileService
673
674**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
675
676**参数:**
677
678| 参数名 | 类型 | 必填 | 说明 |
679| --- | --- | --- | -- |
680| uri | string | 是 | 表示需要创建文件的父目录的Uri |
681| displayName | string | 是 | 待创建文件的名称,默认本地文件需要添加后缀 |
682
683**返回值:**
684
685| 类型 | 说明 |
686| --- | -- |
687| Promise&lt;string&gt; | 新创建的文件的uri |
688
689**错误码:**
690
691接口抛出错误码的详细介绍请参见[文件管理错误码](errorcode-filemanagement.md)。
692
693**示例:**
694
695  ```ts
696  import { BusinessError } from '@ohos.base';
697  // 以内置存储目录为例
698  // 示例代码sourceUri表示Download目录,该uri是对应的fileInfo中uri
699  // 开发者应根据自己实际获取的uri进行开发
700  async function createFile() {
701    // 以内置存储目录为例
702    // 示例代码sourceUri表示Download目录,该uri是对应的fileInfo中uri
703    // 开发者应根据自己实际获取的uri进行开发
704    let sourceUri: string = "file://docs/storage/Users/currentUser/Download";
705    let displayName: string = "file1";
706    let fileUri: string;
707    try {
708      // fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取
709      fileUri = await fileAccessHelper.createFile(sourceUri, displayName);
710      if (!fileUri) {
711        console.error("createFile return undefined object");
712        return;
713      }
714      console.log("createFile sucess, fileUri: " + JSON.stringify(fileUri));
715    } catch (err) {
716      let error: BusinessError = err as BusinessError;
717      console.error("createFile failed, errCode:" + error.code + ", errMessage:" + error.message);
718    }
719  }
720  ```
721
722### createFile
723
724createFile(uri: string, displayName: string, callback: AsyncCallback&lt;string&gt;) : void
725
726以异步方法创建文件到指定目录,返回新文件uri。使用callback异步回调。
727
728**系统能力**:SystemCapability.FileManagement.UserFileService
729
730**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
731
732**参数:**
733
734| 参数名 | 类型 | 必填 | 说明 |
735| --- | --- | --- | -- |
736| uri | string | 是 | 表示需要创建文件的父目录的Uri |
737| displayName | string | 是 | 待创建文件的名称,默认本地文件需要添加后缀 |
738| callback | AsyncCallback&lt;string&gt; | 是 | 新创建的文件的uri |
739
740**错误码:**
741
742接口抛出错误码的详细介绍请参见[文件管理错误码](errorcode-filemanagement.md)。
743
744**示例:**
745
746  ```ts
747  import { BusinessError } from '@ohos.base';
748  // 以内置存储目录为例
749  // 示例代码sourceUri表示Download目录,该uri是对应的fileInfo中uri
750  // 开发者应根据自己实际获取的uri进行开发
751  let sourceUri: string = "file://docs/storage/Users/currentUser/Download";
752  let displayName: string = "file1";
753  try {
754    // fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取
755    fileAccessHelper.createFile(sourceUri, displayName, (err: BusinessError, fileUri: string) => {
756      if (err) {
757        console.error("Failed to createFile in async, errCode:" + err.code + ", errMessage:" + err.message);
758      }
759      console.log("createFile sucess, fileUri: " + JSON.stringify(fileUri));
760    });
761  } catch (err) {
762    let error: BusinessError = err as BusinessError;
763    console.error("createFile failed, errCode:" + error.code + ", errMessage:" + error.message);
764  }
765  ```
766
767### mkDir
768
769mkDir(parentUri: string, displayName: string) : Promise&lt;string&gt;
770
771以异步方法创建文件夹到指定目录,返回文件夹uri。使用Promise异步回调。
772
773**系统能力**:SystemCapability.FileManagement.UserFileService
774
775**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
776
777**参数:**
778
779| 参数名 | 类型 | 必填 | 说明 |
780| --- | --- | --- | -- |
781| parentUri | string | 是 | 表示需要创建文件夹的父目录的Uri |
782| displayName | string | 是 | 待创建文件夹的名称|
783
784**返回值:**
785
786| 类型 | 说明 |
787| --- | -- |
788| Promise&lt;string&gt; | 新创建的文件夹的uri |
789
790**错误码:**
791
792接口抛出错误码的详细介绍请参见[文件管理错误码](errorcode-filemanagement.md)。
793
794**示例:**
795
796  ```ts
797  import { BusinessError } from '@ohos.base';
798  // 以内置存储目录为例
799  // 示例代码sourceUri表示Download目录,该uri是对应的fileInfo中uri
800  // 开发者应根据自己实际获取的uri进行开发
801  async function createDirectory() {
802    let sourceUri: string = "file://docs/storage/Users/currentUser/Download";
803    let dirName: string = "dirTest";
804    let dirUri: string;
805
806    try {
807      // fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取
808      dirUri = await fileAccessHelper.mkDir(sourceUri, dirName);
809      if (!dirUri) {
810        console.error("mkDir return undefined object");
811      } else {
812        console.log("mkDir success, dirUri: " + JSON.stringify(dirUri));
813      }
814    } catch (err) {
815      let error: BusinessError = err as BusinessError;
816      console.error("mkDir failed, errCode:" + error.code + ", errMessage:" + error.message);
817    }
818  }
819  ```
820
821### mkDir
822
823mkDir(parentUri: string, displayName: string, callback: AsyncCallback&lt;string&gt;) : void
824
825以异步方法创建文件夹到指定目录,返回文件夹uri。使用callback异步回调。
826
827**系统能力**:SystemCapability.FileManagement.UserFileService
828
829**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
830
831**参数:**
832
833| 参数名 | 类型 | 必填 | 说明 |
834| --- | --- | --- | -- |
835| parentUri | string | 是 | 表示需要创建文件夹的父目录的Uri |
836| displayName | string | 是 | 待创建文件夹的名称|
837| callback | AsyncCallback&lt;string&gt; | 是 | 新创建的文件夹的uri |
838
839**错误码:**
840
841接口抛出错误码的详细介绍请参见[文件管理错误码](errorcode-filemanagement.md)。
842
843**示例:**
844
845  ```ts
846  import { BusinessError } from '@ohos.base';
847  // 以内置存储目录为例
848  // 示例代码sourceUri表示Download目录,该uri是对应的fileInfo中uri
849  // 开发者应根据自己实际获取的uri进行开发
850  let sourceUri: string = "file://docs/storage/Users/currentUser/Download";
851  let dirName: string = "dirTest";
852  try {
853    // fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取
854    fileAccessHelper.mkDir(sourceUri, dirName, (err: BusinessError, dirUri: string) => {
855      if (err) {
856        console.error("Failed to mkDir in async, errCode:" + err.code + ", errMessage:" + err.message);
857      }
858      console.log("mkDir sucess, dirUri: " + JSON.stringify(dirUri));
859    });
860  } catch (err) {
861    let error: BusinessError = err as BusinessError;
862    console.error("mkDir failed, errCode:" + error.code + ", errMessage:" + error.message);
863  }
864  ```
865
866### openFile
867
868openFile(uri: string, flags: OPENFLAGS) : Promise&lt;number&gt;
869
870以异步方法打开文件,返回文件描述符。使用Promise异步回调。
871
872**系统能力**:SystemCapability.FileManagement.UserFileService
873
874**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
875
876**参数:**
877
878| 参数名 | 类型 | 必填 | 说明 |
879| --- | --- | --- | -- |
880| uri | string | 是 | 待打开文件的uri |
881| flags | [OPENFLAGS](#openflags) | 是 | 文件打开的标志 |
882
883**返回值:**
884
885| 类型 | 说明 |
886| --- | -- |
887| Promise&lt;number&gt; | 文件描述符 |
888
889**错误码:**
890
891接口抛出错误码的详细介绍请参见[文件管理错误码](errorcode-filemanagement.md)。
892
893**示例:**
894
895  ```ts
896  import { BusinessError } from '@ohos.base';
897  async function openFile01() {
898    // 以内置存储目录为例
899    // 示例代码targetUri表示Download目录下文件,该uri是对应的fileInfo中uri
900    // 开发者应根据自己实际获取的uri进行开发
901    let targetUri: string = "file://docs/storage/Users/currentUser/Download/1.txt";
902    try {
903      // fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取
904      let fd = await fileAccessHelper.openFile(targetUri, fileAccess.OPENFLAGS.READ);
905    } catch (err) {
906      let error: BusinessError = err as BusinessError;
907      console.error("openFile failed, errCode:" + error.code + ", errMessage:" + error.message);
908    }
909  }
910  ```
911
912### openFile
913
914openFile(uri: string, flags: OPENFLAGS, callback: AsyncCallback&lt;number&gt;) : void
915
916以异步方法打开文件,返回文件描述符。使用callback异步回调。
917
918**系统能力**:SystemCapability.FileManagement.UserFileService
919
920**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
921
922**参数:**
923
924| 参数名 | 类型 | 必填 | 说明 |
925| --- | --- | --- | -- |
926| uri | string | 是 | 待打开文件的uri |
927| flags | [OPENFLAGS](#openflags) | 是 | 文件打开的标志 |
928| callback | AsyncCallback&lt;number&gt; | 是 | 文件描述符 |
929
930**错误码:**
931
932接口抛出错误码的详细介绍请参见[文件管理错误码](errorcode-filemanagement.md)。
933
934**示例:**
935
936  ```ts
937  import { BusinessError } from '@ohos.base';
938  // 以内置存储目录为例
939  // 示例代码targetUri表示Download目录下文件,该uri是对应的fileInfo中uri
940  // 开发者应根据自己实际获取的uri进行开发
941  let targetUri: string = "file://docs/storage/Users/currentUser/Download/1.txt";
942  try {
943    // fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取
944    fileAccessHelper.openFile(targetUri, fileAccess.OPENFLAGS.READ, (err: BusinessError, fd: number) => {
945      if (err) {
946        console.error("Failed to openFile in async, errCode:" + err.code + ", errMessage:" + err.message);
947      }
948      console.log("openFile sucess, fd: " + fd);
949    });
950  } catch (err) {
951    let error: BusinessError = err as BusinessError;
952    console.error("openFile failed, errCode:" + error.code + ", errMessage:" + error.message);
953  }
954  ```
955
956### delete
957
958delete(uri: string) : Promise&lt;number&gt;
959
960以异步方法删除文件(夹),返回错误码。使用Promise异步回调。
961
962**系统能力**:SystemCapability.FileManagement.UserFileService
963
964**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
965
966**参数:**
967
968| 参数名 | 类型 | 必填 | 说明 |
969| --- | --- | --- | -- |
970| uri | string | 是 | 待删除文件(夹)的uri |
971
972**返回值:**
973
974| 类型 | 说明 |
975| --- | -- |
976| Promise&lt;number&gt; | 删除操作的错误码 |
977
978**错误码:**
979
980接口抛出错误码的详细介绍请参见[文件管理错误码](errorcode-filemanagement.md)。
981
982**示例:**
983
984  ```ts
985  import { BusinessError } from '@ohos.base';
986  async function deleteFile01() {
987    // 以内置存储目录为例
988    // 示例代码targetUri表示Download目录下文件,该uri是对应的fileInfo中uri
989    // 开发者应根据自己实际获取的uri进行开发
990    let targetUri: string = "file://docs/storage/Users/currentUser/Download/1.txt";
991    try {
992      // fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取
993      let code = await fileAccessHelper.delete(targetUri);
994      if (code != 0)
995        console.error("delete failed, code " + code);
996    } catch (err) {
997      let error: BusinessError = err as BusinessError;
998      console.error("delete failed, errCode:" + error.code + ", errMessage:" + error.message);
999    }
1000  }
1001  ```
1002
1003### delete
1004
1005delete(uri: string, callback: AsyncCallback&lt;number&gt;) : void
1006
1007以异步方法删除文件(夹),返回错误码。使用callback异步回调。
1008
1009**系统能力**:SystemCapability.FileManagement.UserFileService
1010
1011**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
1012
1013**参数:**
1014
1015| 参数名 | 类型 | 必填 | 说明 |
1016| --- | --- | --- | -- |
1017| uri | string | 是 | 待删除文件(夹)的uri |
1018| callback | AsyncCallback&lt;number&gt; | 是 | 删除操作的错误码 |
1019
1020**错误码:**
1021
1022接口抛出错误码的详细介绍请参见[文件管理错误码](errorcode-filemanagement.md)。
1023
1024**示例:**
1025
1026  ```ts
1027  import { BusinessError } from '@ohos.base';
1028  // 以内置存储目录为例
1029  // 示例代码targetUri表示Download目录下文件,该uri是对应的fileInfo中uri
1030  // 开发者应根据自己实际获取的uri进行开发
1031  let targetUri: string = "file://docs/storage/Users/currentUser/Download/1.txt";
1032  try {
1033    // fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取
1034    fileAccessHelper.delete(targetUri, (err: BusinessError, code: number) => {
1035      if (err) {
1036        console.error("Failed to delete in async, errCode:" + err.code + ", errMessage:" + err.message);
1037      }
1038      console.log("delete sucess, code: " + code);
1039    });
1040  } catch (err) {
1041    let error: BusinessError = err as BusinessError;
1042    console.error("delete failed, errCode:" + error.code + ", errMessage:" + error.message);
1043  }
1044  ```
1045
1046### move
1047
1048move(sourceFile: string, destFile: string) : Promise&lt;string&gt;
1049
1050以异步方法移动文件(夹),返回移动后文件(夹)的uri。使用Promise异步回调。目前仅支持设备内移动,跨设备不支持移动。
1051
1052**系统能力**:SystemCapability.FileManagement.UserFileService
1053
1054**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
1055
1056**参数:**
1057
1058| 参数名 | 类型 | 必填 | 说明 |
1059| --- | --- | --- | -- |
1060| sourceFile | string | 是 | 待移动的源文件(夹)的uri |
1061| destFile | string | 是 | 目标文件夹的uri |
1062
1063**返回值:**
1064
1065| 类型 | 说明 |
1066| ----- | ------ |
1067| Promise&lt;string&gt; | 新路径下的文件(夹)的uri |
1068
1069**错误码:**
1070
1071接口抛出错误码的详细介绍请参见[文件管理错误码](errorcode-filemanagement.md)。
1072
1073**示例:**
1074
1075  ```ts
1076  import { BusinessError } from '@ohos.base';
1077  async function moveFile01() {
1078    // 以内置存储目录为例
1079    // 示例代码sourceFile destFile表示Download目录下文件和文件夹,该uri是对应的fileInfo中uri
1080    // 开发者应根据自己实际获取的uri进行开发
1081    let sourceFile: string = "file://docs/storage/Users/currentUser/Download/1.txt";
1082    let destFile: string = "file://docs/storage/Users/currentUser/Download/test";
1083    try {
1084      // fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取
1085      let fileUri = await fileAccessHelper.move(sourceFile, destFile);
1086      console.log("move sucess, fileUri: " + JSON.stringify(fileUri));
1087    } catch (err) {
1088      let error: BusinessError = err as BusinessError;
1089      console.error("move failed, errCode:" + error.code + ", errMessage:" + error.message);
1090    }
1091  }
1092  ```
1093
1094### move
1095
1096move(sourceFile: string, destFile: string, callback: AsyncCallback&lt;string&gt;) : void
1097
1098以异步方法移动文件(夹),返回移动后文件(夹)的uri。使用callback异步回调。目前仅支持设备内移动,跨设备不支持移动。
1099
1100**系统能力**:SystemCapability.FileManagement.UserFileService
1101
1102**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
1103
1104**参数:**
1105
1106| 参数名 | 类型 | 必填 | 说明 |
1107| --- | --- | --- | -- |
1108| sourceFile | string | 是 | 待移动的源文件(夹)的uri |
1109| destFile | string | 是 | 目标文件夹的uri |
1110| callback | AsyncCallback&lt;string&gt; | 是 | 新路径下的文件(夹)的uri |
1111
1112**错误码:**
1113
1114接口抛出错误码的详细介绍请参见[文件管理错误码](errorcode-filemanagement.md)。
1115
1116**示例:**
1117
1118  ```ts
1119  import { BusinessError } from '@ohos.base';
1120  // 以内置存储目录为例
1121  // 示例代码sourceFile destFile表示Download目录下文件和文件夹,该uri是对应的fileInfo中uri
1122  // 开发者应根据自己实际获取的uri进行开发
1123  let sourceFile: string = "file://docs/storage/Users/currentUser/Download/1.txt";
1124  let destFile: string = "file://docs/storage/Users/currentUser/Download/test";
1125  try {
1126    // fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取
1127    fileAccessHelper.move(sourceFile, destFile, (err: BusinessError, fileUri: string) => {
1128      if (err) {
1129        console.error("Failed to move in async, errCode:" + err.code + ", errMessage:" + err.message);
1130      }
1131      console.log("move sucess, fileUri: " + JSON.stringify(fileUri));
1132    });
1133  } catch (err) {
1134    let error: BusinessError = err as BusinessError;
1135    console.error("move failed, errCode:" + error.code + ", errMessage:" + error.message);
1136  }
1137  ```
1138
1139### rename
1140
1141rename(uri: string, displayName: string) : Promise&lt;string&gt;
1142
1143以异步方法重命名文件(夹),返回重命名后的文件(夹)的Uri。使用Promise异步回调。
1144
1145**系统能力**:SystemCapability.FileManagement.UserFileService
1146
1147**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
1148
1149**参数:**
1150
1151| 参数名 | 类型 | 必填 | 说明 |
1152| --- | --- | --- | -- |
1153| uri | string | 是 | 源文件(夹)的uri |
1154| displayName | string | 是 | 文件(夹)名,支持带后缀 |
1155
1156**返回值:**
1157
1158| 类型 | 说明 |
1159| --- | -- |
1160| Promise&lt;string&gt; | 重命名后的文件(夹)的uri |
1161
1162**错误码:**
1163
1164接口抛出错误码的详细介绍请参见[文件管理错误码](errorcode-filemanagement.md)。
1165
1166**示例:**
1167
1168  ```ts
1169  import { BusinessError } from '@ohos.base';
1170  async function renameFile01() {
1171    // 以内置存储目录为例
1172    // 示例代码sourceDir表示Download目录下文件,该uri是对应的fileInfo中uri
1173    // 开发者应根据自己实际获取的uri进行开发
1174    let sourceDir: string = "file://docs/storage/Users/currentUser/Download/1.txt";
1175    try {
1176      // fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取
1177      let DestDir = await fileAccessHelper.rename(sourceDir, "testDir");
1178      console.log("rename sucess, DestDir: " + JSON.stringify(DestDir));
1179    } catch (err) {
1180      let error: BusinessError = err as BusinessError;
1181      console.error("rename failed, errCode:" + error.code + ", errMessage:" + error.message);
1182    }
1183  }
1184  ```
1185
1186### rename
1187
1188rename(uri: string, displayName: string, callback: AsyncCallback&lt;string&gt;) : void
1189
1190以异步方法重命名文件(夹),返回重命名后的文件(夹)的Uri。使用callback异步回调。
1191
1192**系统能力**:SystemCapability.FileManagement.UserFileService
1193
1194**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
1195
1196**参数:**
1197
1198| 参数名 | 类型 | 必填 | 说明 |
1199| --- | --- | --- | -- |
1200| uri | string | 是 | 源文件(夹)的uri |
1201| displayName | string | 是 | 文件(夹)名,支持带后缀 |
1202| callback | AsyncCallback&lt;string&gt; | 是 | 重命名后的文件(夹)的uri |
1203
1204**错误码:**
1205
1206接口抛出错误码的详细介绍请参见[文件管理错误码](errorcode-filemanagement.md)。
1207
1208**示例:**
1209
1210  ```ts
1211  import { BusinessError } from '@ohos.base';
1212  // 以内置存储目录为例
1213  // 示例代码sourceDir表示Download目录下文件,该uri是对应的fileInfo中uri
1214  // 开发者应根据自己实际获取的uri进行开发
1215  let sourceDir: string = "file://docs/storage/Users/currentUser/Download/1.txt";
1216  try {
1217    // fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取
1218    fileAccessHelper.rename(sourceDir, "testDir", (err: BusinessError, DestDir: string) => {
1219      if (err) {
1220        console.error("Failed to rename in async, errCode:" + err.code + ", errMessage:" + err.message);
1221      }
1222      console.log("rename sucess, DestDir: " + JSON.stringify(DestDir));
1223    });
1224  } catch (err) {
1225    let error: BusinessError = err as BusinessError;
1226    console.error("rename failed, errCode:" + error.code + ", errMessage:" + error.message);
1227  }
1228  ```
1229
1230### access
1231
1232access(sourceFileUri: string) : Promise&lt;boolean&gt;
1233
1234以异步方法判断文件(夹)是否存在。使用Promise异步回调。
1235
1236**系统能力**:SystemCapability.FileManagement.UserFileService
1237
1238**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
1239
1240**参数:**
1241
1242| 参数名 | 类型 | 必填 | 说明 |
1243| --- | --- | --- | -- |
1244| sourceFileUri | string | 是 | 文件(夹)的uri |
1245
1246**返回值:**
1247
1248| 类型 | 说明 |
1249| --- | -- |
1250| Promise&lt;boolean&gt; | 文件(夹)是否存在 |
1251
1252**错误码:**
1253
1254接口抛出错误码的详细介绍请参见[文件管理错误码](errorcode-filemanagement.md)。
1255
1256**示例:**
1257
1258  ```ts
1259  import { BusinessError } from '@ohos.base';
1260  // 以内置存储目录为例
1261  // 示例代码sourceDir表示Download目录下文件,该uri是对应的fileInfo中uri
1262  // 开发者应根据自己实际获取的uri进行开发
1263  async function accessFunc() {
1264    let sourceDir: string = "file://docs/storage/Users/currentUser/Download/1.txt";
1265    try {
1266      // fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取
1267      let existJudgment = await fileAccessHelper.access(sourceDir);
1268      if (existJudgment) {
1269        console.log("sourceDir exists");
1270      } else {
1271        console.log("sourceDir does not exist");
1272      }
1273    } catch (err) {
1274      let error: BusinessError = err as BusinessError;
1275      console.error("access failed, errCode:" + error.code + ", errMessage:" + error.message);
1276    }
1277  }
1278  ```
1279
1280### access
1281
1282access(sourceFileUri: string, callback: AsyncCallback&lt;boolean&gt;) : void
1283
1284以异步方法判断文件(夹)是否存在。使用callback异步回调。
1285
1286**系统能力**:SystemCapability.FileManagement.UserFileService
1287
1288**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
1289
1290**参数:**
1291
1292| 参数名 | 类型 | 必填 | 说明 |
1293| --- | --- | --- | -- |
1294| sourceFileUri | string | 是 | 文件(夹)的uri |
1295| callback | AsyncCallback&lt;boolean&gt; | 是 | 文件(夹)是否存在 |
1296
1297**错误码:**
1298
1299接口抛出错误码的详细介绍请参见[文件管理错误码](errorcode-filemanagement.md)。
1300
1301**示例:**
1302
1303  ```ts
1304  import { BusinessError } from '@ohos.base';
1305  // 以内置存储目录为例
1306  // 示例代码sourceDir表示Download目录下文件夹,该uri是对应的fileInfo中uri
1307  // 开发者应根据自己实际获取的uri进行开发
1308  let sourceDir: string = "file://docs/storage/Users/currentUser/Download/test";
1309  try {
1310    // fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取
1311    fileAccessHelper.access(sourceDir, (err: BusinessError, existJudgment: boolean) => {
1312      if (err) {
1313        console.error("Failed to access in async, errCode:" + err.code + ", errMessage:" + err.message);
1314        return;
1315      }
1316      if (existJudgment)
1317        console.log("sourceDir exists");
1318      else
1319        console.log("sourceDir does not exist");
1320    });
1321  } catch (err) {
1322    let error: BusinessError = err as BusinessError;
1323    console.error("access failed, errCode:" + error.code + ", errMessage:" + error.message);
1324  }
1325  ```
1326
1327### getFileInfoFromUri<sup>10+</sup>
1328
1329getFileInfoFromUri(uri: string) : Promise\<FileInfo>
1330
1331以异步方法获取uri对应的FileInfo对象。使用promise异步回调。
1332
1333**系统能力**:SystemCapability.FileManagement.UserFileService
1334
1335**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
1336
1337**参数:**
1338
1339| 参数名 | 类型 | 必填 | 说明 |
1340| --- | --- | --- | -- |
1341| uri | string | 是 | 文件(夹)的Uri |
1342
1343**返回值:**
1344
1345| 类型 | 说明 |
1346| --- | -- |
1347| Promise\<[FileInfo](#fileinfo)> | FileInfo对象 |
1348
1349**示例:**
1350
1351  ```ts
1352  import { BusinessError } from '@ohos.base';
1353  // 以内置存储目录为例
1354  // 示例代码sourceUri表示Download目录,该uri是对应的fileInfo中uri
1355  // 开发者应根据自己实际获取的uri进行开发
1356  async function getUri() {
1357    let sourceUri: string = "file://docs/storage/Users/currentUser/Download";
1358    try {
1359      // fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取
1360      let fileInfo = await fileAccessHelper.getFileInfoFromUri(sourceUri);
1361    } catch (err) {
1362      let error: BusinessError = err as BusinessError;
1363      console.error("getFileInfoFromUri failed, errCode:" + error.code + ", errMessage:" + error.message);
1364    }
1365  }
1366  ```
1367
1368### getFileInfoFromUri<sup>10+</sup>
1369
1370getFileInfoFromUri(uri: string, callback: AsyncCallback\<FileInfo>) : void
1371
1372以异步方法获取uri对应的FileInfo对象。使用callback异步回调。
1373
1374**系统能力**:SystemCapability.FileManagement.UserFileService
1375
1376**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
1377
1378**参数:**
1379
1380| 参数名 | 类型 | 必填 | 说明 |
1381| --- | --- | --- | -- |
1382| uri | string | 是 | 文件(夹)的Uri |
1383| callback | AsyncCallback&lt;[FileInfo](#fileinfo)&gt; | 是 | uri对应的FileInfo对象 |
1384
1385**示例:**
1386
1387  ```ts
1388  import { BusinessError } from '@ohos.base';
1389  // 以内置存储目录为例
1390  // 示例代码sourceUri表示Download目录,该uri是对应的fileInfo中uri
1391  // 开发者应根据自己实际获取的uri进行开发
1392  let sourceUri: string = "file://docs/storage/Users/currentUser/Download";
1393  try {
1394    // fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取
1395    fileAccessHelper.getFileInfoFromUri(sourceUri, (err: BusinessError, fileInfo: fileAccess.FileInfo) => {
1396      if (err) {
1397        console.error("Failed to getFileInfoFromUri in async, errCode:" + err.code + ", errMessage:" + err.message);
1398        return;
1399      }
1400      console.log("getFileInfoFromUri success, fileInfo: " + JSON.stringify(fileInfo));
1401    });
1402  } catch (err) {
1403    let error: BusinessError = err as BusinessError;
1404    console.error("getFileInfoFromUri failed, errCode:" + error.code + ", errMessage:" + error.message);
1405  }
1406  ```
1407
1408
1409### getFileInfoFromRelativePath<sup>10+</sup>
1410
1411getFileInfoFromRelativePath(relativePath: string) : Promise\<FileInfo>
1412
1413以异步方法获取relativePath对应的FileInfo对象。使用promise异步回调。
1414
1415**系统能力**:SystemCapability.FileManagement.UserFileService
1416
1417**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
1418
1419**参数:**
1420
1421| 参数名 | 类型 | 必填 | 说明 |
1422| --- | --- | --- | -- |
1423| relativePath | string | 是 | 文件(夹)的相对路径 |
1424
1425**返回值:**
1426
1427| 类型 | 说明 |
1428| --- | -- |
1429| Promise\<[FileInfo](#fileinfo)> | FileInfo对象 |
1430
1431**示例:**
1432
1433  ```ts
1434  import { BusinessError } from '@ohos.base';
1435  // 示例代码relativePath表示Download目录,该relativePath是对应的fileInfo中relativePath
1436  // 开发者应根据自己实际获取的relativePath进行开发
1437  async function getRelativePath() {
1438    let relativePath: string = "Download/";
1439    try {
1440      // fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取
1441      let fileInfo = await fileAccessHelper.getFileInfoFromRelativePath(relativePath);
1442    } catch (err) {
1443      let error: BusinessError = err as BusinessError;
1444      console.error("getFileInfoFromRelativePath failed, errCode:" + error.code + ", errMessage:" + error.message);
1445    }
1446  }
1447  ```
1448
1449### getFileInfoFromRelativePath<sup>10+</sup>
1450
1451getFileInfoFromRelativePath(relativePath: string, callback: AsyncCallback\<FileInfo>) : void
1452
1453以异步方法获取relativePath对应的FileInfo对象。使用callback异步回调。
1454
1455**系统能力**:SystemCapability.FileManagement.UserFileService
1456
1457**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
1458
1459**参数:**
1460
1461| 参数名 | 类型 | 必填 | 说明 |
1462| --- | --- | --- | -- |
1463| relativePath | string | 是 | 文件(夹)的相对路径 |
1464| callback | AsyncCallback&lt;[FileInfo](#fileinfo)&gt; | 是 | relativePath对应的FileInfo对象 |
1465
1466**示例:**
1467
1468  ```ts
1469  import { BusinessError } from '@ohos.base';
1470  // 示例代码relativePath表示Download目录,该relativePath是对应的fileInfo中relativePath
1471  // 开发者应根据自己实际获取的relativePath进行开发
1472  let relativePath: string = "Download/";
1473  try {
1474    // fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取
1475    fileAccessHelper.getFileInfoFromRelativePath(relativePath, (err: BusinessError, fileInfo: fileAccess.FileInfo) => {
1476      if (err) {
1477        console.error("Failed to getFileInfoFromRelativePath in async, errCode:" + err.code + ", errMessage:" + err.message);
1478        return;
1479      }
1480      console.log("getFileInfoFromRelativePath success, fileInfo: " + JSON.stringify(fileInfo));
1481    });
1482  } catch (err) {
1483    let error: BusinessError = err as BusinessError;
1484    console.error("getFileInfoFromRelativePath failed, errCode:" + error.code + ", errMessage:" + error.message);
1485  }
1486  ```
1487
1488### query<sup>10+</sup>
1489
1490query(uri:string, metaJson: string) : Promise&lt;string&gt;
1491
1492通过uri查询文件或目录的相关信息,使用Promise异步回调。
1493
1494**系统能力**:SystemCapability.FileManagement.UserFileService
1495
1496**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
1497
1498**参数:**
1499
1500| 参数名   | 类型   | 必填 | 说明                                                 |
1501| -------- | ------ | ---- | ---------------------------------------------------- |
1502| uri      | string | 是   | 所选文件或目录的uri(从[FileInfo](#fileinfo)中获取) |
1503| metaJson | string | 是   | json字符串,包含查询属性[FILEKEY](#filekey10)        |
1504
1505**返回值:**
1506
1507| 类型                  | 说明                             |
1508| :-------------------- | :------------------------------- |
1509| Promise&lt;string&gt; | 返回json字符串,包括查询属性和值 |
1510
1511**示例:**
1512
1513```ts
1514import { BusinessError } from '@ohos.base';
1515async function getQuery01() {
1516  let imageFileRelativePath: string = "/storage/Users/currentUser/Download/queryTest/image/01.jpg";
1517  let jsonStrSingleRelativepath: string = JSON.stringify({ [fileAccess.FileKey.RELATIVE_PATH]: "" });
1518  try {
1519    // fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取
1520    let fileInfo = await fileAccessHelper.getFileInfoFromRelativePath(imageFileRelativePath);
1521    let queryResult = await fileAccessHelper.query(fileInfo.uri, jsonStrSingleRelativepath);
1522    console.log("query_file_single faf query, queryResult.relative_path: " + JSON.parse(queryResult).relative_path);
1523  } catch (err) {
1524    let error: BusinessError = err as BusinessError;
1525    console.error("query_file_single faf query failed, error.code :" + error.code + ", errorMessage :" + error.message);
1526  }
1527}
1528```
1529
1530### query<sup>10+</sup>
1531
1532query(uri:string, metaJson: string, callback: AsyncCallback&lt;string&gt;) : void
1533
1534通过uri查询文件或目录的相关信息,使用callback异步回调。
1535
1536**系统能力**:SystemCapability.FileManagement.UserFileService
1537
1538**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
1539
1540**参数:**
1541
1542| 参数名   | 类型                        | 必填 | 说明                                                 |
1543| -------- | --------------------------- | ---- | ---------------------------------------------------- |
1544| uri      | string | 是   | 所选文件或目录的uri(从[FileInfo](#fileinfo)中获取) |
1545| metaJson | string | 是   | json字符串,包含查询属性[FILEKEY](#filekey10)        |
1546| callback | AsyncCallback&lt;string&gt; | 是   | 返回json字符串,包括查询属性和值                     |
1547
1548**示例:**
1549
1550```ts
1551import { BusinessError } from '@ohos.base';
1552async function getQuery02() {
1553  let imageFileRelativePath: string = "/storage/Users/currentUser/Download/queryTest/image/01.jpg";
1554  let jsonStrSingleRelativepath: string = JSON.stringify({ [fileAccess.FileKey.RELATIVE_PATH]: "" });
1555  try {
1556    // fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取
1557    let fileInfo = await fileAccessHelper.getFileInfoFromRelativePath(imageFileRelativePath);
1558    fileAccessHelper.query(fileInfo.uri, jsonStrSingleRelativepath, (err: BusinessError, queryResult: string) => {
1559      if (err) {
1560        console.log("query_file_single faf query Failed, errCode:" + err.code + ", errMessage:" + err.message);
1561        return;
1562      }
1563      console.log("query_file_single faf query, queryResult.relative_path: " + JSON.parse(queryResult).relative_path);
1564    })
1565  } catch (err) {
1566    let error: BusinessError = err as BusinessError;
1567    console.error("query_file_single faf query failed, error.code :" + error.code + ", errorMessage :" + error.message);
1568  }
1569}
1570```
1571
1572### copy<sup>10+</sup>
1573
1574copy(sourceUri: string, destUri: string, force?: boolean) : Promise&lt;Array&lt;CopyResult&gt;&gt;
1575
1576复制文件或目录,使用 Promise 异步回调。
1577
1578**系统能力**:SystemCapability.FileManagement.UserFileService
1579
1580**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
1581
1582**参数:**
1583
1584| 参数名    | 类型    | 必填 | 说明                                                         |
1585| --------- | ------- | ---- | ------------------------------------------------------------ |
1586| sourceUri | string  | 是   | 待拷贝的源文件(夹)的 uri,例如:file://docs/storage/Users/currentUser/Download/1.txt  |
1587| destUri   | string  | 是   | 目标文件夹的 uri,例如:file://docs/storage/Users/currentUser/Download/test        |
1588| force     | boolean | 否   | 含有同名文件时是否强制覆盖文件,force 为 true 时强制覆盖文件,force 为空或 false 时不强制覆盖文件 |
1589
1590**返回值:**
1591
1592| 类型                                                    | 说明                                                         |
1593| :------------------------------------------------------ | :----------------------------------------------------------- |
1594| Promise&lt;Array&lt;[CopyResult](#copyresult10)&gt;&gt; | 返回 copyresult 数组,copyResult 为复制操作失败的返回信息,复制成功无返回信息 |
1595
1596**示例 1:force 为空**
1597
1598```ts
1599import { BusinessError } from '@ohos.base';
1600// 以内置存储目录为例
1601// 示例代码中的sourceFile表示Download目录下的源文件(夹),destFile表示Download目录下的目标文件夹,该uri对应fileInfo中的uri
1602// 开发者应根据自己实际获取的uri进行开发
1603async function copyFunc01() {
1604  let sourceFile: string = "file://docs/storage/Users/currentUser/Download/1.txt";
1605  let destFile: string = "file://docs/storage/Users/currentUser/Download/test";
1606  try {
1607    // fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取
1608    let copyResult = await fileAccessHelper.copy(sourceFile, destFile);
1609    if (copyResult.length === 0) {
1610      console.log("copy success");
1611    } else {
1612      for (let i = 0; i < copyResult.length; i++) {
1613        console.error("errCode" + copyResult[i].errCode);
1614        console.error("errMsg" + copyResult[i].errMsg);
1615        console.error("sourceUri" + copyResult[i].sourceUri);
1616        console.error("destUri" + copyResult[i].destUri);
1617      }
1618    }
1619  } catch (err) {
1620    let error: BusinessError = err as BusinessError;
1621    console.error("copy failed, errCode:" + error.code + ", errMessage:" + error.message);
1622  }
1623}
1624```
1625
1626**示例 2:force 为 true**
1627
1628```ts
1629import { BusinessError } from '@ohos.base';
1630// 以内置存储目录为例
1631// 示例代码中的sourceFile表示Download目录下的源文件(夹),destFile表示Download目录下的目标文件夹,该uri对应fileInfo中的uri
1632// 开发者应根据自己实际获取的uri进行开发
1633async function copyFunc02() {
1634  let sourceFile: string = "file://docs/storage/Users/currentUser/Download/1.txt";
1635  let destFile: string = "file://docs/storage/Users/currentUser/Download/test";
1636  try {
1637    // fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取
1638    let copyResult = await fileAccessHelper.copy(sourceFile, destFile, true);
1639    if (copyResult.length === 0) {
1640      console.log("copy success");
1641    } else {
1642      for (let i = 0; i < copyResult.length; i++) {
1643        console.error("errCode" + copyResult[i].errCode);
1644        console.error("errMsg" + copyResult[i].errMsg);
1645        console.error("sourceUri" + copyResult[i].sourceUri);
1646        console.error("destUri" + copyResult[i].destUri);
1647      }
1648    }
1649  } catch (err) {
1650    let error: BusinessError = err as BusinessError;
1651    console.error("copy failed, errCode:" + error.code + ", errMessage:" + error.message);
1652  }
1653}
1654```
1655
1656### copy<sup>10+</sup>
1657
1658copy(sourceUri: string, destUri: string, callback: AsyncCallback&lt;Array&lt;CopyResult&gt;&gt;) : void
1659
1660复制文件或目录,使用 callback 异步回调。
1661
1662**系统能力**:SystemCapability.FileManagement.UserFileService
1663
1664**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
1665
1666**参数:**
1667
1668| 参数名    | 类型                                             | 必填 | 说明                                                         |
1669| --------- | ------------------------------------------------ | ---- | ------------------------------------------------------------ |
1670| sourceUri | string                                           | 是   | 待拷贝的源文件(夹)的 uri,例如:file://docs/storage/Users/currentUser/Download/1.txt  |
1671| destUri   | string                                           | 是   | 目标文件夹的 uri,例如:file://docs/storage/Users/currentUser/Download/test         |
1672| callback  | AsyncCallback&lt;Array&lt;[CopyResult](#copyresult10)&gt;&gt; | 是   | 返回 copyresult 数组,copyResult 为复制操作失败的返回信息,复制成功无返回信息 |
1673
1674**示例:**
1675
1676```ts
1677import { BusinessError } from '@ohos.base';
1678// 以内置存储目录为例
1679// 示例代码中的sourceFile表示Download目录下的源文件(夹),destFile表示Download目录下的目标文件夹,该uri对应fileInfo中的uri
1680// 开发者应根据自己实际获取的uri进行开发
1681let sourceFile: string = "file://docs/storage/Users/currentUser/Download/1.txt";
1682let destFile: string = "file://docs/storage/Users/currentUser/Download/test";
1683try {
1684  // fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取
1685  fileAccessHelper.copy(sourceFile, destFile, async (err: BusinessError, copyResult: Array<fileAccess.CopyResult>) => {
1686    if (err) {
1687      console.error("copy failed, errCode:" + err.code + ", errMessage:" + err.message);
1688    }
1689    if (copyResult.length === 0) {
1690      console.log("copy success");
1691    } else {
1692      for (let i = 0; i < copyResult.length; i++) {
1693        console.error("errCode" + copyResult[i].errCode);
1694        console.error("errMsg" + copyResult[i].errMsg);
1695        console.error("sourceUri" + copyResult[i].sourceUri);
1696        console.error("destUri" + copyResult[i].destUri);
1697      }
1698    }
1699  });
1700} catch (err) {
1701  let error: BusinessError = err as BusinessError;
1702  console.error("copy failed, errCode:" + error.code + ", errMessage:" + error.message);
1703}
1704```
1705
1706### copy<sup>10+</sup>
1707
1708copy(sourceUri: string, destUri: string, force: boolean, callback: AsyncCallback&lt;Array&lt;CopyResult&gt;&gt;) : void
1709
1710复制文件或目录,使用 callback 异步回调。
1711
1712**系统能力**:SystemCapability.FileManagement.UserFileService
1713
1714**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
1715
1716**参数:**
1717
1718| 参数名    | 类型                                             | 必填 | 说明                                                         |
1719| --------- | ------------------------------------------------ | ---- | ------------------------------------------------------------ |
1720| sourceUri | string                                           | 是   | 待拷贝的源文件(夹)的 uri,例如:file://docs/storage/Users/currentUser/Download/1.txt  |
1721| destUri   | string                                           | 是   | 目标文件夹的 uri,例如:file://docs/storage/Users/currentUser/Download/test         |
1722| force     | boolean                                          | 是   | 含有同名文件时是否强制覆盖文件,force 为 true 时强制覆盖文件,force 为空或 false 时不强制覆盖文件 |
1723| callback  | AsyncCallback&lt;Array&lt;[CopyResult](#copyresult10)&gt;&gt; | 是   | 返回 copyresult 数组,copyResult 为复制操作失败的返回信息,复制成功无返回信息 |
1724
1725**示例:**
1726
1727```ts
1728import { BusinessError } from '@ohos.base';
1729// 以内置存储目录为例
1730// 示例代码中的sourceFile表示Download目录下的源文件(夹),destFile表示Download目录下的目标文件夹,该uri对应fileInfo中的uri
1731// 开发者应根据自己实际获取的uri进行开发
1732let sourceFile: string = "file://docs/storage/Users/currentUser/Download/1.txt";
1733let destFile: string = "file://docs/storage/Users/currentUser/Download/test";
1734try {
1735  // fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取
1736  fileAccessHelper.copy(sourceFile, destFile, true, async (err: BusinessError, copyResult: Array<fileAccess.CopyResult>) => {
1737    if (err) {
1738      console.error("copy failed, errCode:" + err.code + ", errMessage:" + err.message);
1739    }
1740    if (copyResult.length === 0) {
1741      console.log("copy success");
1742    } else {
1743      for (let i = 0; i < copyResult.length; i++) {
1744        console.error("errCode" + copyResult[i].errCode);
1745        console.error("errMsg" + copyResult[i].errMsg);
1746        console.error("sourceUri" + copyResult[i].sourceUri);
1747        console.error("destUri" + copyResult[i].destUri);
1748      }
1749    }
1750  });
1751} catch (err) {
1752  let error: BusinessError = err as BusinessError;
1753  console.error("copy failed, errCode:" + error.code + ", errMessage:" + error.message);
1754}
1755```
1756
1757### copyFile<sup>11+</sup>
1758
1759copyFile(sourceUri: string, destUri: string, fileName: string): Promise&lt;string&gt;
1760
1761复制文件并传入备用文件名,使用Promise异步回调。
1762
1763**模型约束**:此接口仅可在Stage模型下使用。
1764
1765**系统能力**:SystemCapability.FileManagement.UserFileService
1766
1767**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
1768
1769**参数:**
1770
1771| 参数名    | 类型    | 必填 | 说明                                                         |
1772| --------- | ------- | ---- | ------------------------------------------------------------ |
1773| sourceUri | string  | 是   | 待拷贝的源文件(夹)的 uri,例如:file://docs/storage/Users/currentUser/Download/1.txt  |
1774| destUri   | string  | 是   | 目标文件夹的 uri,例如:file://docs/storage/Users/currentUser/Download/test        |
1775| fileName  | string  | 是   | 如果目标目录中有1.txt文件,就是用fileName 作为文件名进行复制 |
1776
1777**返回值:**
1778
1779| 类型                                                    | 说明                                                         |
1780| :------------------------------------------------------ | :----------------------------------------------------------- |
1781| Promise&lt;string&gt; | 返回一个复制成功的文件的uri |
1782
1783**示例 1**
1784
1785```ts
1786import { BusinessError } from '@ohos.base';
1787// 以内置存储目录为例
1788// 示例代码中的sourceFile表示Download目录下的源文件(夹),destFile表示Download目录下的目标文件夹,该uri对应fileInfo中的uri
1789// 开发者应根据自己实际获取的uri进行开发
1790async function copyFunc01() {
1791  let sourceFile: string = "file://docs/storage/Users/currentUser/Download/1.txt";
1792  let destFile: string = "file://docs/storage/Users/currentUser/Download/test";
1793  let fileName: string = "2.txt";
1794  try {
1795    // fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取
1796    let copyResult = await fileAccessHelper.copyFile(sourceFile, destFile, fileName);
1797    console.log("copyResult uri: " + copyResult);
1798  } catch (err) {
1799    let error: BusinessError = err as BusinessError;
1800    console.error("copy failed, errCode:" + error.code + ", errMessage:" + error.message);
1801  }
1802}
1803```
1804
1805### copyFile<sup>11+</sup>
1806
1807copyFile(sourceUri: string, destUri: string, fileName: string, callback: AsyncCallback&lt;string&gt;) : void
1808
1809复制文件并传入备用文件名,使用callback异步回调。
1810
1811**模型约束**:此接口仅可在Stage模型下使用。
1812
1813**系统能力**:SystemCapability.FileManagement.UserFileService
1814
1815**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
1816
1817**参数:**
1818
1819| 参数名    | 类型                                             | 必填 | 说明                                                         |
1820| --------- | ------------------------------------------------ | ---- | ------------------------------------------------------------ |
1821| sourceUri | string                                           | 是   | 待拷贝的源文件(夹)的 uri,例如:file://docs/storage/Users/currentUser/Download/1.txt  |
1822| destUri   | string                                           | 是   | 目标文件夹的 uri,例如:file://docs/storage/Users/currentUser/Download/test         |
1823| fileName  | string                                           | 是   | 如果目标目录中有1.txt文件,就是用fileName 作为文件名进行复制 |
1824| callback  | AsyncCallback&lt;string&gt; | 是   | 返回一个复制成功的文件的uri |
1825
1826**示例:**
1827
1828```ts
1829import { BusinessError } from '@ohos.base';
1830// 以内置存储目录为例
1831// 示例代码中的sourceFile表示Download目录下的源文件(夹),destFile表示Download目录下的目标文件夹,该uri对应fileInfo中的uri
1832// 开发者应根据自己实际获取的uri进行开发
1833let sourceFile: string = "file://docs/storage/Users/currentUser/Download/1.txt";
1834let destFile: string = "file://docs/storage/Users/currentUser/Download/test";
1835let fileName: string = "2.txt";
1836
1837try {
1838  // fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取
1839  fileAccessHelper.copyFile(sourceFile, destFile, fileName, async (copyResult: string) => {
1840        console.log("copyResult uri: " + copyResult);
1841  });
1842} catch (err) {
1843  let error: BusinessError = err as BusinessError;
1844  console.error("copy failed, errCode:" + error.code + ", errMessage:" + error.message);
1845}
1846```
1847
1848### registerObserver<sup>10+</sup>
1849
1850registerObserver(uri: string, notifyForDescendants: boolean, callback: Callback&lt;NotifyMessage&gt;): void
1851
1852注册指定uri的callback。uri与callback可以为多对多的关系,推荐使用一个callback监听一个uri。
1853
1854**系统能力**:SystemCapability.FileManagement.UserFileService
1855
1856**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
1857
1858**参数:**
1859
1860| 参数名               | 类型                                              | 必填 | 说明                           |
1861| -------------------- | ------------------------------------------------- | ---- | ------------------------------ |
1862| uri                  | string                                            | 是   | 文件或目录的uri                |
1863| notifyForDescendants | boolean                                           | 是   | 监听目录时,是否监听子文件变化 |
1864| callback             | Callback&lt;[NotifyMessage](#notifymessage10)&gt; | 是   | 返回通知信息                   |
1865
1866**示例1:注册一个callback对一个uri的监听**
1867
1868```ts
1869import { BusinessError } from '@ohos.base';
1870async function registerObserver01() {
1871  let DirUri: string = 'file://docs/storage/Users/currentUser/Documents';
1872  try {
1873    // fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取
1874    let dirUri1 = await fileAccessHelper.mkDir(DirUri, 'NOTIFY_DIR1');
1875    let dirUri2 = await fileAccessHelper.mkDir(DirUri, 'NOTIFY_DIR2');
1876    // 因注册时notifyForDescendants参数为true所以期待收到两次通知
1877    // uri为'file://docs/storage/Users/currentUser/Documents/NOTIFY_DIR1/SUB_FILE',事件类型为NOTIFY_MOVED_FROM
1878    // uri为'file://docs/storage/Users/currentUser/Documents/NOTIFY_DIR1/SUB_FILE',事件类型为NOTIFY_MOVE_SELF
1879    const callbackDir1 = (NotifyMessageDir: fileAccess.NotifyMessage) => {
1880      if (NotifyMessageDir != undefined) {
1881        console.log('NotifyType: ' + NotifyMessageDir.type + 'NotifyUri:' + NotifyMessageDir.uris[0]);
1882      } else {
1883        console.error("NotifyMessageDir is undefined");
1884      }
1885    }
1886    // 期待收到uri为'file://docs/storage/Users/currentUser/Documents/NOTIFY_DIR2/SUB_FILE',事件类型为NOTIFY_MOVED_TO
1887    const callbackDir2 = (NotifyMessageDir: fileAccess.NotifyMessage) => {
1888      if (NotifyMessageDir != undefined) {
1889        console.log('NotifyType: ' + NotifyMessageDir.type + 'NotifyUri:' + NotifyMessageDir.uris[0]);
1890      } else {
1891        console.error("NotifyMessageDir is undefined");
1892      }
1893    }
1894    // 期待收到uri为'file://docs/storage/Users/currentUser/Documents/NOTIFY_DIR1/SUB_FILE',事件类型为NOTIFY_MOVE_SELF
1895    // 期待收到uri为'file://docs/storage/Users/currentUser/Documents/NOTIFY_DIR1/SUB_FILE',事件类型为NOTIFY_MOVED_FROM
1896    const callbackFile = (NotifyMessageDir: fileAccess.NotifyMessage) => {
1897      if (NotifyMessageDir != undefined) {
1898        console.log('NotifyType: ' + NotifyMessageDir.type + 'NotifyUri:' + NotifyMessageDir.uris[0]);
1899      } else {
1900        console.error("NotifyMessageDir is undefined");
1901      }
1902    }
1903    let fileUri = await fileAccessHelper.createFile(dirUri1, 'SUB_FILE');
1904    fileAccessHelper.registerObserver(dirUri1, true, callbackDir1);
1905    fileAccessHelper.registerObserver(dirUri2, true, callbackDir2);
1906    // 如果不监听被移动文件本身,将不会触发NOTIFY_MOVE_SELF事件
1907    fileAccessHelper.registerObserver(fileUri, true, callbackFile);
1908    let moveFileUri = await fileAccessHelper.move(fileUri, dirUri2);
1909    // 注册完不应立即解注册,可能存在解注册先于通知返回的情景,这将收不到通知事件
1910    fileAccessHelper.unregisterObserver(dirUri1, callbackDir1);
1911    fileAccessHelper.unregisterObserver(dirUri2, callbackDir2);
1912    fileAccessHelper.unregisterObserver(fileUri, callbackFile);
1913  } catch (err) {
1914    let error: BusinessError = err as BusinessError;
1915    console.error("registerObserver failed, errCode:" + error.code + ", errMessage:" + error.message);
1916  }
1917}
1918```
1919
1920**示例2:使用相同uri、notifyForDescendants、callback重复注册**
1921
1922```ts
1923import { BusinessError } from '@ohos.base';
1924async function registerObserver02() {
1925  let DirUri: string = 'file://docs/storage/Users/currentUser/Documents';
1926  try {
1927    // fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取
1928    let dirUri = await fileAccessHelper.mkDir(DirUri, 'NOTIFY_DIR');
1929    // 期待收到uri为'file://docs/storage/Users/currentUser/Documents/NOTIFY_DIR/SUB_DIR',事件类型为NOTIFY_ADD
1930    const callbackDir = (NotifyMessageDir: fileAccess.NotifyMessage) => {
1931      if (NotifyMessageDir != undefined) {
1932        console.log('NotifyType: ' + NotifyMessageDir.type + 'NotifyUri:' + NotifyMessageDir.uris[0]);
1933      } else {
1934        console.error("NotifyMessageDir is undefined");
1935      }
1936    }
1937    fileAccessHelper.registerObserver(dirUri, true, callbackDir);
1938    // 返回注册成功,仅在log中提示重复注册
1939    fileAccessHelper.registerObserver(dirUri, true, callbackDir);
1940    let subDirUri = await fileAccessHelper.mkDir(dirUri, 'SUB_DIR');
1941    // 注册完不应立即解注册,可能存在解注册先于通知返回的情景,这将收不到通知事件
1942    fileAccessHelper.unregisterObserver(dirUri, callbackDir);
1943  } catch (err) {
1944    let error: BusinessError = err as BusinessError;
1945    console.error("registerObserver failed, errCode:" + error.code + ", errMessage:" + error.message);
1946  }
1947}
1948```
1949
1950**示例3:使用相同uri、callback及不同notifyForDescendants重复注册会重置notifyForDescendants**
1951
1952```ts
1953import { BusinessError } from '@ohos.base';
1954async function registerObserver03() {
1955  let DirUri: string = 'file://docs/storage/Users/currentUser/Documents';
1956  try {
1957    // fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取
1958    let dirUri = await fileAccessHelper.mkDir(DirUri, 'NOTIFY_DIR');
1959    // 期待第一次收到uri为'file://docs/storage/Users/currentUser/Documents/NOTIFY_DIR/SUB_FILE_1',事件类型为NOTIFY_ADD
1960    // 期待无第二次返回
1961    const callbackDir = (NotifyMessageDir: fileAccess.NotifyMessage) => {
1962      if (NotifyMessageDir != undefined) {
1963        console.log('NotifyType: ' + NotifyMessageDir.type + 'NotifyUri:' + NotifyMessageDir.uris[0]);
1964      } else {
1965        console.error("NotifyMessageDir is undefined");
1966      }
1967    }
1968    fileAccessHelper.registerObserver(dirUri, true, callbackDir);
1969    let subFile1 = await fileAccessHelper.createFile(dirUri, 'SUB_FILE_1');
1970    // 注册成功修改notifyForDescendants为false,不感知子文件的变化
1971    fileAccessHelper.registerObserver(dirUri, false, callbackDir);
1972    let subFile2 = await fileAccessHelper.createFile(dirUri, 'SUB_FILE_2');
1973    // 注册完不应立即解注册,可能存在解注册先于通知返回的情景,这将收不到通知事件
1974    fileAccessHelper.unregisterObserver(dirUri, callbackDir);
1975  } catch (err) {
1976    let error: BusinessError = err as BusinessError;
1977    console.error("registerObserver failed, errCode:" + error.code + ", errMessage:" + error.message);
1978  }
1979}
1980```
1981
1982**示例4:注册监听设备上下线**
1983
1984```ts
1985import { BusinessError } from '@ohos.base';
1986async function UnregisterObserver03() {
1987  try {
1988    const callbackDir1 = (NotifyMessageDir: fileAccess.NotifyMessage) => {
1989      if (NotifyMessageDir != undefined) {
1990        console.log('NotifyType: ' + NotifyMessageDir.type + 'NotifyUri:' + NotifyMessageDir.uris[0]);
1991      } else {
1992        console.error("NotifyMessageDir is undefined");
1993      }
1994    }
1995    // 监听设备的上下线
1996    fileAccessHelper.registerObserver(fileAccess.DEVICES_URI, true, callbackDir1);
1997    // 取消监听设备的上下线
1998    fileAccessHelper.unregisterObserver(fileAccess.DEVICES_URI);
1999  } catch (err) {
2000    let error: BusinessError = err as BusinessError;
2001    console.error("unregisterObserver failed, errCode:" + error.code + ", errMessage:" + error.message);
2002  }
2003}
2004```
2005
2006### unregisterObserver<sup>10+</sup>
2007
2008 unregisterObserver(uri: string, callback?: Callback&lt;NotifyMessage&gt;): void
2009
2010取消注册指定的uri和callback。
2011
2012**系统能力**:SystemCapability.FileManagement.UserFileService
2013
2014**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
2015
2016**参数:**
2017
2018| 参数名   | 类型                                              | 必填 | 说明                      |
2019| -------- | ------------------------------------------------- | ---- | ------------------------- |
2020| uri      | string                                            | 是   | 文件或目录的uri           |
2021| callback | Callback&lt;[NotifyMessage](#notifymessage10)&gt; | 否   | 解注册uri下对应的callback。如果该参数不填,则解注册对应的所有callbackback |
2022
2023**示例1: 解注册监听uri的一个callback**
2024
2025```ts
2026import { BusinessError } from '@ohos.base';
2027async function UnregisterObserver01() {
2028  let DirUri: string = 'file://docs/storage/Users/currentUser/Documents';
2029  try {
2030    // fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取
2031    let dirUri = await fileAccessHelper.mkDir(DirUri, 'NOTIFY_DIR');
2032    // 期待收到uri为'file://docs/storage/Users/currentUser/Documents/NOTIFY_DIR',事件类型为NOTIFY_DELETE
2033    const callbackDir = (NotifyMessageDir: fileAccess.NotifyMessage) => {
2034      if (NotifyMessageDir != undefined) {
2035        console.log('NotifyType: ' + NotifyMessageDir.type + 'NotifyUri:' + NotifyMessageDir.uris[0]);
2036      } else {
2037        console.error("NotifyMessageDir is undefined");
2038      }
2039    }
2040    fileAccessHelper.registerObserver(dirUri, true, callbackDir);
2041    await fileAccessHelper.delete(dirUri);
2042    // 注册完不应立即解注册,可能存在解注册先于通知返回的情景,这将收不到通知事件
2043    fileAccessHelper.unregisterObserver(dirUri, callbackDir);
2044  } catch (err) {
2045    let error: BusinessError = err as BusinessError;
2046    console.error("unregisterObserver failed, errCode:" + error.code + ", errMessage:" + error.message);
2047  }
2048}
2049```
2050
2051**示例2:对监听uri的某一callback重复解注册**
2052
2053```ts
2054import { BusinessError } from '@ohos.base';
2055async function UnregisterObserver02() {
2056  let DirUri: string = 'file://docs/storage/Users/currentUser/Documents';
2057  try {
2058    // fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取
2059    let dirUri = await fileAccessHelper.mkDir(DirUri, 'NOTIFY_DIR');
2060    // 期待收到uri为'file://docs/storage/Users/currentUser/Documents/NOTIFY_DIR',事件类型为NOTIFY_DELETE
2061    const callbackDir = (NotifyMessageDir: fileAccess.NotifyMessage) => {
2062      if (NotifyMessageDir != undefined) {
2063        console.log('NotifyType: ' + NotifyMessageDir.type + 'NotifyUri:' + NotifyMessageDir.uris[0]);
2064      } else {
2065        console.error("NotifyMessageDir is undefined");
2066      }
2067    }
2068    fileAccessHelper.registerObserver(dirUri, true, callbackDir);
2069    await fileAccessHelper.delete(dirUri);
2070    // 注册完不应立即解注册,可能存在解注册先于通知返回的情景,这将收不到通知事件
2071    fileAccessHelper.unregisterObserver(dirUri, callbackDir);
2072    // 解注册失败,抛出错误码 E_CAN_NOT_FIND_URI
2073    fileAccessHelper.unregisterObserver(dirUri, callbackDir);
2074  } catch (err) {
2075    let error: BusinessError = err as BusinessError;
2076    console.error("unregisterObserver failed, errCode:" + error.code + ", errMessage:" + error.message);
2077  }
2078}
2079```
2080
2081**示例3:解注册监听uri的所有callback**
2082
2083```ts
2084import { BusinessError } from '@ohos.base';
2085async function UnregisterObserver03() {
2086  let DirUri: string = 'file://docs/storage/Users/currentUser/Documents';
2087  try {
2088    // fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取
2089    let dirUri = await fileAccessHelper.mkDir(DirUri, 'NOTIFY_DIR');
2090    // 期待收到uri为'file://docs/storage/Users/currentUser/Documents/NOTIFY_DIR/SUB_FILE',事件类型为NOTIFY_MOVED_FROM
2091    // 期待收到uri为'file://docs/storage/Users/currentUser/Documents/NOTIFY_DIR/RENAME_FILE',事件类型为NOTIFY_MOVED_TO
2092    const callbackDir1 = (NotifyMessageDir: fileAccess.NotifyMessage) => {
2093      if (NotifyMessageDir != undefined) {
2094        console.log('NotifyType: ' + NotifyMessageDir.type + 'NotifyUri:' + NotifyMessageDir.uris[0]);
2095      } else {
2096        console.error("NotifyMessageDir is undefined");
2097      }
2098    }
2099    // 期待收不到任何事件
2100    const callbackDir2 = (NotifyMessageDir: fileAccess.NotifyMessage) => {
2101      if (NotifyMessageDir != undefined) {
2102        console.log('NotifyType: ' + NotifyMessageDir.type + 'NotifyUri:' + NotifyMessageDir.uris[0]);
2103      } else {
2104        console.error("NotifyMessageDir is undefined");
2105      }
2106    }
2107    let fileUri = await fileAccessHelper.createFile(dirUri, 'SUB_FILE');
2108    fileAccessHelper.registerObserver(dirUri, true, callbackDir1);
2109    // 此处注册为不关注下一级,将收不到关于下一级的事件
2110    fileAccessHelper.registerObserver(dirUri, false, callbackDir2);
2111    let renameUri = await fileAccessHelper.rename(fileUri, 'RENAME_FILE');
2112    // 取消注册监听dirUri的所有callback(callbackDir1、callbackDir2)
2113    // 注册完不应立即解注册,可能存在解注册先于通知返回的情景,这将收不到通知事件
2114    fileAccessHelper.unregisterObserver(dirUri);
2115    await fileAccessHelper.delete(dirUri);
2116  } catch (err) {
2117    let error: BusinessError = err as BusinessError;
2118    console.error("unregisterObserver failed, errCode:" + error.code + ", errMessage:" + error.message);
2119  }
2120}
2121```
2122
2123**示例4:解注册监听设备的上下线**
2124
2125```ts
2126import { BusinessError } from '@ohos.base';
2127async function UnregisterObserver03() {
2128  try {
2129    const callbackDir1 = (NotifyMessageDir: fileAccess.NotifyMessage) => {
2130      if (NotifyMessageDir != undefined) {
2131        console.log('NotifyType: ' + NotifyMessageDir.type + 'NotifyUri:' + NotifyMessageDir.uris[0]);
2132      } else {
2133        console.error("NotifyMessageDir is undefined");
2134      }
2135    }
2136    // 监听设备的上下线
2137    fileAccessHelper.registerObserver(fileAccess.DEVICES_URI, true, callbackDir1);
2138    // 取消监听设备的上下线
2139    fileAccessHelper.unregisterObserver(fileAccess.DEVICES_URI);
2140  } catch (err) {
2141    let error: BusinessError = err as BusinessError;
2142    console.error("unregisterObserver failed, errCode:" + error.code + ", errMessage:" + error.message);
2143  }
2144}
2145```
2146
2147### moveItem<sup>11+</sup>
2148
2149moveItem(sourceUri: string, destUri: string, force?: boolean) : Promise&lt;Array&lt;MoveResult&gt;&gt;
2150
2151以异步方法移动文件(夹),返回移动后文件(夹)的uri。使用Promise异步回调。
2152
2153当存在同名文件时,可以选择强制覆盖文件。
2154
2155目前仅支持设备内移动,跨设备不支持移动。
2156
2157**模型约束**:此接口仅可在Stage模型下使用。
2158
2159**系统能力**:SystemCapability.FileManagement.UserFileService
2160
2161**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
2162
2163**参数:**
2164
2165| 参数名    | 类型    | 必填 | 说明                                                         |
2166| --------- | ------- | ---- | ------------------------------------------------------------ |
2167| sourceUri | string  | 是   | 待移动的源文件(夹)的uri。                                    |
2168| destUri   | string  | 是   | 目标文件夹的uri。                                            |
2169| force     | boolean | 否   | 选择当存在同名文件时,是否强制覆盖文件。当force为true时,强制覆盖文件;为false时不强制覆盖文件。该参数不填,默认为false。 |
2170
2171**返回值:**
2172
2173| 类型                                                    | 说明                                                         |
2174| ------------------------------------------------------- | ------------------------------------------------------------ |
2175| Promise&lt;Array&lt;[MoveResult](#moveresult11)&gt;&gt; | 返回 moveresult 数组,moveResult 为移动操作失败的返回信息,复制成功无返回信息。 |
2176
2177**错误码:**
2178
2179接口抛出错误码的详细介绍请参见[文件管理错误码](errorcode-filemanagement.md)。
2180
2181**示例 1:force 为空**
2182
2183```ts
2184import { BusinessError } from '@ohos.base';
2185// 以内置存储目录为例
2186// 示例代码中的sourceFile表示Download目录下的源文件(夹),destFile表示Download目录下的目标文件夹,该uri对应fileInfo中的uri
2187// 开发者应根据自己实际获取的uri进行开发
2188async function moveItemFunc01() {
2189  let sourceUri: string = "file://docs/storage/Users/currentUser/Download/1.txt";
2190  let destUri: string = "file://docs/storage/Users/currentUser/Download/test";
2191  try {
2192    // fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取
2193    let moveResult = await fileAccessHelper.moveItem(sourceUri, destUri);
2194    if (moveResult.length === 0) {
2195      console.log("moveItem success");
2196    } else {
2197      for (let i = 0; i < moveResult.length; i++) {
2198        console.error("errCode" + moveResult[i].errCode);
2199        console.error("errMsg" + moveResult[i].errMsg);
2200        console.error("sourceUri" + moveResult[i].sourceUri);
2201        console.error("destUri" + moveResult[i].destUri);
2202      }
2203    }
2204  } catch (err) {
2205    let error: BusinessError = err as BusinessError;
2206    console.error("moveItem failed, errCode:" + error.code + ", errMessage:" + error.message);
2207  }
2208}
2209```
2210
2211**示例 2:force 为 true**
2212
2213```ts
2214import { BusinessError } from '@ohos.base';
2215// 以内置存储目录为例
2216// 示例代码中的sourceFile表示Download目录下的源文件(夹),destFile表示Download目录下的目标文件夹,该uri对应fileInfo中的uri
2217// 开发者应根据自己实际获取的uri进行开发
2218async function moveItemFunc02() {
2219  let sourceUri: string = "file://docs/storage/Users/currentUser/Download/1.txt";
2220  let destUri: string = "file://docs/storage/Users/currentUser/Download/test";
2221  try {
2222    // fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取
2223    let moveResult = await fileAccessHelper.moveItem(sourceUri, destUri, true);
2224    if (moveResult.length === 0) {
2225      console.log("moveItem success");
2226    } else {
2227      for (let i = 0; i < moveResult.length; i++) {
2228        console.error("errCode" + moveResult[i].errCode);
2229        console.error("errMsg" + moveResult[i].errMsg);
2230        console.error("sourceUri" + moveResult[i].sourceUri);
2231        console.error("destUri" + moveResult[i].destUri);
2232      }
2233    }
2234  } catch (err) {
2235    let error: BusinessError = err as BusinessError;
2236    console.error("moveItem failed, errCode:" + error.code + ", errMessage:" + error.message);
2237  }
2238}
2239```
2240
2241### moveItem<sup>11+</sup>
2242
2243moveItem(sourceUri: string, destUri: string, callback: AsyncCallback&lt;Array&lt;MoveResult&gt;&gt;) : void
2244
2245以异步方法移动文件(夹),返回移动后文件(夹)的uri。使用callback异步回调。
2246
2247当前仅支持设备内移动,不支持跨设备移动。
2248
2249**模型约束**:此接口仅可在Stage模型下使用。
2250
2251**系统能力**:SystemCapability.FileManagement.UserFileService
2252
2253**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
2254
2255**参数:**
2256
2257| 参数名    | 类型                                                         | 必填 | 说明                                                         |
2258| --------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
2259| sourceUri | string                                                       | 是   | 待移动的源文件(夹)的uri。                                    |
2260| destUri   | string                                                       | 是   | 目标文件夹的uri。                                            |
2261| callback  | AsyncCallback&lt;Array&lt;[MoveResult](#moveresult11)&gt;&gt; | 是   | 回调返回MoveResult数组。MoveResult为移动操作失败的返回信息,移动成功无返回信息。 |
2262
2263**示例:**
2264
2265```ts
2266import { BusinessError } from '@ohos.base';
2267// 以内置存储目录为例
2268// 示例代码中的sourceFile表示Download目录下的源文件(夹),destFile表示Download目录下的目标文件夹,该uri对应fileInfo中的uri
2269// 开发者应根据自己实际获取的uri进行开发
2270let sourceUri: string = "file://docs/storage/Users/currentUser/Download/1.txt";
2271let destUri: string = "file://docs/storage/Users/currentUser/Download/test";
2272try {
2273  // fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取
2274  fileAccessHelper.moveItem(sourceUri, destUri, async (err: BusinessError, copyResult: Array<fileAccess.MoveResult>) => {
2275    if (err) {
2276      console.error("moveItem failed, errCode:" + err.code + ", errMessage:" + err.message);
2277    }
2278    if (moveResult.length === 0) {
2279      console.log("moveItem success");
2280    } else {
2281      for (let i = 0; i < moveResult.length; i++) {
2282        console.error("errCode" + moveResult[i].errCode);
2283        console.error("errMsg" + moveResult[i].errMsg);
2284        console.error("sourceUri" + moveResult[i].sourceUri);
2285        console.error("destUri" + moveResult[i].destUri);
2286      }
2287    }
2288  });
2289} catch (err) {
2290  let error: BusinessError = err as BusinessError;
2291  console.error("moveItem failed, errCode:" + error.code + ", errMessage:" + error.message);
2292}
2293```
2294
2295### moveItem<sup>11+</sup>
2296
2297moveItem(sourceUri: string, destUri: string, force: boolean, callback: AsyncCallback&lt;Array&lt;MoveResult&gt;&gt;) : void
2298
2299以异步方法移动文件(夹),返回移动后文件(夹)的uri。使用callback异步回调。
2300
2301当存在同名文件时,可以选择强制覆盖文件。
2302
2303当前仅支持设备内移动,不支持跨设备移动。
2304
2305**模型约束**:此接口仅可在Stage模型下使用。
2306
2307**系统能力**:SystemCapability.FileManagement.UserFileService
2308
2309**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
2310
2311**参数:**
2312
2313| 参数名    | 类型                                                         | 必填 | 说明                                                         |
2314| --------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
2315| sourceUri | string                                                       | 是   | 待移动的源文件(夹)的uri。                                    |
2316| destUri   | string                                                       | 是   | 目标文件夹的uri。                                            |
2317| force     | boolean                                                      | 是   | 选择当存在同名文件时,是否强制覆盖文件。当force为true时,强制覆盖文件;为false时不强制覆盖文件。该参数不填,默认为false。 |
2318| callback  | AsyncCallback&lt;Array&lt;[MoveResult](#moveresult11)&gt;&gt; | 是   | 回调返回MoveResult数组。MoveResult为移动操作失败的返回信息,移动成功无返回信息。 |
2319
2320**示例:**
2321
2322```ts
2323import { BusinessError } from '@ohos.base';
2324// 以内置存储目录为例
2325// 示例代码中的sourceFile表示Download目录下的源文件(夹),destFile表示Download目录下的目标文件夹,该uri对应fileInfo中的uri
2326// 开发者应根据自己实际获取的uri进行开发
2327let sourceUri: string = "file://docs/storage/Users/currentUser/Download/1.txt";
2328let destUri: string = "file://docs/storage/Users/currentUser/Download/test";
2329try {
2330  // fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取
2331  fileAccessHelper.moveItem(sourceUri, destUri, true, async (err: BusinessError, moveResult: Array<fileAccess.MoveResult>) => {
2332    if (err) {
2333      console.error("moveItem failed, errCode:" + err.code + ", errMessage:" + err.message);
2334    }
2335    if (moveResult.length === 0) {
2336      console.log("copy success");
2337    } else {
2338      for (let i = 0; i < moveResult.length; i++) {
2339        console.error("errCode" + moveResult[i].errCode);
2340        console.error("errMsg" + moveResult[i].errMsg);
2341        console.error("sourceUri" + moveResult[i].sourceUri);
2342        console.error("destUri" + moveResult[i].destUri);
2343      }
2344    }
2345  });
2346} catch (err) {
2347  let error: BusinessError = err as BusinessError;
2348  console.error("moveItem failed, errCode:" + error.code + ", errMessage:" + error.message);
2349}
2350```
2351
2352### moveFile<sup>11+</sup>
2353
2354moveFile(sourceUri: string, destUri: string, fileName: string) : Promise&lt;string&gt;
2355
2356以异步方法移动文件,返回移动后文件的uri。使用Promise异步回调。
2357
2358当存在同名文件时(即发生文件移动冲突时),可以重命名待移动的文件,再保存到目标文件夹。
2359
2360目前仅支持设备内移动,跨设备不支持移动。
2361
2362**模型约束**:此接口仅可在Stage模型下使用。
2363
2364**系统能力**:SystemCapability.FileManagement.UserFileService
2365
2366**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
2367
2368**参数:**
2369
2370| 参数名     | 类型   | 必填 | 说明                |
2371| ---------- | ------ | ---- | ------------------- |
2372| sourceFile | string | 是   | 待移动源文件的uri。 |
2373| destFile   | string | 是   | 目标文件夹的uri。   |
2374| fileName   | string | 是   | 冲突文件的新名称。  |
2375
2376**返回值:**
2377
2378| 类型                  | 说明                |
2379| --------------------- | ------------------- |
2380| Promise&lt;string&gt; | 新路径下的文件uri。 |
2381
2382**错误码:**
2383
2384接口抛出错误码的详细介绍请参见[文件管理错误码](errorcode-filemanagement.md)。
2385
2386**示例:**
2387
2388  ```ts
2389  import { BusinessError } from '@ohos.base';
2390  async function moveFile01() {
2391    // 以内置存储目录为例
2392    // 示例代码sourceUri destUri表示Download目录下文件和文件夹,该uri是对应的fileInfo中uri
2393    // 开发者应根据自己实际获取的uri进行开发
2394    let sourceUri: string = "file://docs/storage/Users/currentUser/Download/1.txt";
2395    let destUri: string = "file://docs/storage/Users/currentUser/Download/test";
2396    let fileName: string;
2397    try {
2398      // fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取
2399      let fileUri = await fileAccessHelper.moveFile(sourceUri, destUri, fileName);
2400      console.log("moveFile sucess, fileUri: " + JSON.stringify(fileUri));
2401    } catch (err) {
2402      let error: BusinessError = err as BusinessError;
2403      console.error("moveFile failed, errCode:" + error.code + ", errMessage:" + error.message);
2404    }
2405  }
2406  ```
2407
2408### moveFile<sup>11+</sup>
2409
2410moveFile(sourceUri: string, destUri: string,  fileName: string, callback: AsyncCallback&lt;string&gt;) : void
2411
2412以异步方法移动文件,返回移动后文件的uri。使用callback异步回调。
2413
2414当存在同名文件时(即发生文件移动冲突时),可以重命名待移动的文件,再保存到目标文件夹。
2415
2416当前仅支持设备内移动,不支持跨设备移动。
2417
2418**模型约束**:此接口仅可在Stage模型下使用。
2419
2420**系统能力**:SystemCapability.FileManagement.UserFileService
2421
2422**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
2423
2424**参数:**
2425
2426| 参数名     | 类型                        | 必填 | 说明                  |
2427| ---------- | --------------------------- | ---- | --------------------- |
2428| sourceFile | string                      | 是   | 待移动的源文件的uri。 |
2429| destFile   | string                      | 是   | 目标文件夹的uri。     |
2430| fileName   | string                      | 是   | 冲突文件的新名称。    |
2431| callback   | AsyncCallback&lt;string&gt; | 是   | 新路径下的文件uri。   |
2432
2433**错误码:**
2434
2435接口抛出错误码的详细介绍请参见[文件管理错误码](errorcode-filemanagement.md)。
2436
2437**示例:**
2438
2439  ```ts
2440  import { BusinessError } from '@ohos.base';
2441  // 以内置存储目录为例
2442  // 示例代码sourceUri destUri表示Download目录下文件和文件夹,该uri是对应的fileInfo中uri
2443  // 开发者应根据自己实际获取的uri进行开发
2444  let sourceUri: string = "file://docs/storage/Users/currentUser/Download/1.txt";
2445  let destUri: string = "file://docs/storage/Users/currentUser/Download/test";
2446  let fileName: string;
2447  try {
2448    // fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取
2449    fileAccessHelper.moveFile(sourceUri, destUri, fileName, (err: BusinessError, fileUri: string) => {
2450      if (err) {
2451        console.error("Failed to moveFile in async, errCode:" + err.code + ", errMessage:" + err.message);
2452      }
2453      console.log("moveFile sucess, fileUri: " + JSON.stringify(fileUri));
2454    });
2455  } catch (err) {
2456    let error: BusinessError = err as BusinessError;
2457    console.error("moveFile failed, errCode:" + error.code + ", errMessage:" + error.message);
2458  }
2459  ```
2460
2461## CopyResult<sup>10+</sup>
2462
2463表示复制操作失败时的返回信息,复制成功时则没有返回信息。
2464
2465**系统能力**:SystemCapability.FileManagement.UserFileService
2466
2467**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
2468
2469| 名称      | 类型   | 可读 | 可写 | 说明                |
2470| --------- | ------ | ---- | ---- | ----------------- |
2471| sourceUri | string | 是   | 否   | 源文件(夹) uri                                         |
2472| destUri   | string | 是   | 否   | 产生冲突的目标文件的 uri。如果非冲突导致的错误,则为空 |
2473| errCode   | number | 是   | 否   | 错误码                                                 |
2474| errMsg    | string | 是   | 否   | 错误信息                                               |
2475
2476## OPENFLAGS
2477
2478枚举,目前支持的文件打开的标志位。
2479
2480**模型约束**:此接口仅可在Stage模型下使用。
2481
2482**系统能力:** SystemCapability.FileManagement.UserFileService
2483
2484| 名称 | 值 | 说明 |
2485| ----- | ------ | ------ |
2486| READ | 0o0 | 读模式。 |
2487| WRITE | 0o1 | 写模式。 |
2488| WRITE_READ | 0o2 | 读写模式。 |
2489
2490## FILEKEY<sup>10+</sup>
2491
2492枚举,支持查询的键。
2493
2494**模型约束**:此接口仅可在Stage模型下使用。
2495
2496**系统能力:** SystemCapability.FileManagement.UserFileService
2497
2498| 名称          | 值            | 说明                                |
2499| ------------- | ------------- | ----------------------------------- |
2500| DISPLAY_NAME  | 'display_name'  | 文件名                              |
2501| DATE_ADDED    | 'date_added'   | 文件创建的日期,例如1501925454      |
2502| DATE_MODIFIED | 'date_modified' | 文件的修改日期,例如1665310670      |
2503| RELATIVE_PATH | 'relative_path' | 相对路径,例如Pictures/Screenshots/ |
2504| FILE_SIZE     | 'size'          | 文件(夹)大小(单位:字节)        |
2505
2506## NotifyType<sup>10+</sup>
2507
2508枚举,通知类型。
2509
2510**模型约束**:此接口仅可在Stage模型下使用。
2511
2512**系统能力**:SystemCapability.FileManagement.UserFileService
2513
2514| 名称              | 值   | 说明                                                         |
2515| ----------------- | ---- | ------------------------------------------------------------ |
2516| NOTIFY_ADD        | 0    | 表示新增文件(详见registerObserver接口的示例2、示例3)                                                 |
2517| NOTIFY_DELETE     | 1    | 表示删除文件(详见unregisterObserver(uri: string, callback: Callback&lt;NotifyMessage&gt;)接口的示例1、示例2)                                               |
2518| NOTIFY_MOVED_TO   | 2    | 表示移动至该文件(对目录下子文件或目录执行rename操作,或外部文件或目录执行move操作到本文件,详见registerObserver接口的示例1,及unregisterObserver(uri: string)接口的示例1)|
2519| NOTIFY_MOVED_FROM | 3    | 表示自该文件移出(对目录下子文件或目录执行rename操作,或子文件(夹)执行move操作从该文件夹内移出,详见registerObserver接口的示例1,及unregisterObserver(uri: string)接口的示例1) |
2520| NOTIFY_MOVE_SELF  | 4    | 表示本文件被移动(如对文件或文件夹执行rename或move操作时,监听该文件(夹)的callback收到该事件,详见registerObserver接口的示例1)     |
2521| NOTIFY_DEVICE_ONLINE<sup>11+</sup>   | 5    | 表示设备上线     |
2522| NOTIFY_DEVICE_OFFLINE<sup>11+</sup>   | 6    | 表示设备下线     |
2523
2524## NotifyMessage<sup>10+</sup>
2525
2526通知回调函数的值。
2527
2528**模型约束**:此接口仅可在Stage模型下使用。
2529
2530**系统能力**:SystemCapability.FileManagement.UserFileService
2531
2532**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
2533
2534| 名称 | 类型                        | 可读 | 可写 | 说明                                                      |
2535| ---- | --------------------------- | ---- | ---- | --------------------------------------------------------- |
2536| type | [NotifyType](#notifytype10) | 是   | 否   | 变更的通知类型                                            |
2537| uris | Array&lt;string&gt;         | 是   | 否   | 所变更文件的uri集合,目前仅支持单条通知,后序支持多条通知 |
2538
2539## MoveResult<sup>11+</sup>
2540
2541表示移动操作失败时的返回信息,移动成功时则没有返回信息。
2542
2543**模型约束**:此接口仅可在Stage模型下使用。
2544
2545**系统能力**:SystemCapability.FileManagement.UserFileService
2546
2547**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
2548
2549| 名称      | 类型   | 可读 | 可写 | 说明                                                         |
2550| --------- | ------ | ---- | ---- | ------------------------------------------------------------ |
2551| sourceUri | string | 是   | 否   | 源文件(夹) uri                                               |
2552| destUri   | string | 是   | 否   | 产生冲突的目标文件的 uri。如果非冲突导致的错误,则为空。     |
2553| errCode   | number | 是   | 否   | 错误码。接口抛出错误码的详细介绍请参见[文件管理错误码](errorcode-filemanagement.md)。 |
2554| errMsg    | string | 是   | 否   | 错误信息。                                                   |
2555