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_MANAGER 和 ohos.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<Array<Want>>): void 58 59以异步方法获取系统内extension配置为fileAccess类型的所有Want信息。使用callback异步回调。 60 61**模型约束**:此接口仅可在Stage模型下使用。 62 63**系统能力**:SystemCapability.FileManagement.UserFileService 64 65**需要权限**:ohos.permission.FILE_ACCESS_MANAGER 和 ohos.permission.GET_BUNDLE_INFO_PRIVILEGED 66 67**参数:** 68 69 | 参数名 | 类型 | 必填 | 说明 | 70 | --- | --- | --- | -- | 71 | callback | AsyncCallback<Array<[Want](js-apis-app-ability-want.md)>> | 是 | 表示当前系统配置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<Want>) : FileAccessHelper 101 102以同步方法创建连接指定wants的helper对象。 103 104**模型约束**:此接口仅可在Stage模型下使用。 105 106**系统能力**:SystemCapability.FileManagement.UserFileService 107 108**需要权限**:ohos.permission.FILE_ACCESS_MANAGER 和 ohos.permission.GET_BUNDLE_INFO_PRIVILEGED 109 110**参数:** 111 112 | 参数名 | 类型 | 必填 | 说明 | 113 | --- | --- | --- | -- | 114 | context | [Context](js-apis-inner-application-context.md) | 是 | 代表ability的上下文的能力 | 115 | wants | Array<[Want](js-apis-app-ability-want.md)> | 是 | 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_MANAGER 和 ohos.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<RootIterator> 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<[RootIterator](#rootiterator)> | 根设备目录信息组成迭代器对象 | 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<RootIterator>) : 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<[RootIterator](#rootiterator)> | 是 | 根设备目录信息组成迭代器对象 | 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<string> 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<string> | 新创建的文件的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<string>) : 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<string> | 是 | 新创建的文件的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<string> 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<string> | 新创建的文件夹的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<string>) : 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<string> | 是 | 新创建的文件夹的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<number> 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<number> | 文件描述符 | 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<number>) : 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<number> | 是 | 文件描述符 | 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<number> 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<number> | 删除操作的错误码 | 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<number>) : 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<number> | 是 | 删除操作的错误码 | 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<string> 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<string> | 新路径下的文件(夹)的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<string>) : 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<string> | 是 | 新路径下的文件(夹)的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<string> 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<string> | 重命名后的文件(夹)的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<string>) : 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<string> | 是 | 重命名后的文件(夹)的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<boolean> 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<boolean> | 文件(夹)是否存在 | 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<boolean>) : 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<boolean> | 是 | 文件(夹)是否存在 | 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<[FileInfo](#fileinfo)> | 是 | 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<[FileInfo](#fileinfo)> | 是 | 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<string> 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<string> | 返回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<string>) : 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<string> | 是 | 返回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<Array<CopyResult>> 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<Array<[CopyResult](#copyresult10)>> | 返回 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<Array<CopyResult>>) : 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<Array<[CopyResult](#copyresult10)>> | 是 | 返回 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<Array<CopyResult>>) : 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<Array<[CopyResult](#copyresult10)>> | 是 | 返回 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<NotifyMessage>): 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<[NotifyMessage](#notifymessage10)> | 是 | 返回通知信息 | 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<NotifyMessage>): 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<[NotifyMessage](#notifymessage10)> | 否 | 解注册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<NotifyMessage>)接口的示例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<string> | 是 | 否 | 所变更文件的uri集合,目前仅支持单条通知,后序支持多条通知 | 2061