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