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