1# @ohos.file.fileuri (文件URI) 2 3该模块提供通过PATH获取文件统一资源标志符(Uniform Resource Identifier,URI),后续可通过使用[@ohos.file.fs](js-apis-file-fs.md)进行相关open、read、write等操作,实现文件分享。 4 5> **说明:** 6> 7> 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 8 9## 导入模块 10 11```ts 12import { fileUri } from '@kit.CoreFileKit'; 13``` 14 15使用该功能模块前,需要先获取其应用沙箱路径,开发示例如下: 16 17 ```ts 18 import { UIAbility } from '@kit.AbilityKit'; 19 import { window } from '@kit.ArkUI'; 20 21 export default class EntryAbility extends UIAbility { 22 onWindowStageCreate(windowStage: window.WindowStage) { 23 let context = this.context; 24 let pathDir = context.filesDir; 25 } 26 } 27 ``` 28 29## FileUri<sup>10+</sup> 30 31### 属性 32 33**系统能力**:SystemCapability.FileManagement.AppFileService 34 35| 名称 | 类型 | 必填 | 说明| 36| -------- | --------| -------- |----------------| 37| path<sup>10+</sup> | string | 是 | 将uri转换成对应的沙箱路径path。 1、uri转path过程中会将uri中存在的ASCII码进行解码后拼接在原处,非系统接口生成的uri中可能存在ASCII码解析范围之外的字符,导致字符串无法正常拼接;2、转换处理为系统约定的字符串替换规则(规则随系统演进可能会发生变化),转换过程中不进行路径校验操作,无法保证转换结果的一定可以访问。 | 38| name<sup>10+</sup> | string | 是 | 通过传入的uri获取到对应的文件名称。(如果文件名中存在ASCII码将会被解码处理后拼接在原处)<br>**原子化服务API**:从API version 15开始,该接口支持在原子化服务中使用。| 39 40### constructor<sup>10+</sup> 41 42constructor(uriOrPath: string) 43 44constructor是FileUri的构造函数。 45 46**原子化服务API**:从API version 15开始,该接口支持在原子化服务中使用。 47 48**系统能力**:SystemCapability.FileManagement.AppFileService 49 50**参数:** 51 52| 参数名 | 类型 | 必填 | 说明| 53| -------- | -------- | -------- |--------| 54| uriOrPath | string | 是 | uri或路径。uri类型:<br/>- 应用沙箱uri:file://\<bundleName>/\<sandboxPath> <br/>- 公共目录文件类uri:file://docs/storage/Users/currentUser/\<publicPath> <br/>- 公共目录媒体类uri:file://media/\<mediaType>/IMG_DATATIME_ID/\<displayName> | 55 56**错误码:** 57 58以下错误码的详细介绍请参见[文件管理子系统错误码](errorcode-filemanagement.md)。 59| 错误码ID| 错误信息 | 60| -------- | ---------- | 61| 13900005 | I/O error | 62| 13900042 | Unknown error | 63| 13900020 | Invalid argument | 64| 14300002 | Invalid uri | 65 66**示例:** 67 68 ```ts 69 let path = pathDir + '/test'; 70 let uri = fileUri.getUriFromPath(path); // file://<packageName>/data/storage/el2/base/haps/entry/files/test 71 let fileUriObject = new fileUri.FileUri(uri); 72 console.info("The name of FileUri is " + fileUriObject.name); 73 ``` 74 75### toString<sup>10+</sup> 76 77toString(): string 78 79**系统能力**:SystemCapability.FileManagement.AppFileService 80 81返回字符串类型URI。 82 83**返回值:** 84 85| 类型 | 说明 | 86| -------- | -------- | 87| string | 返回字符串类型URI。 | 88 89**示例:** 90 91 ```ts 92 let path = pathDir + '/test'; 93 let fileUriObject = new fileUri.FileUri(path); 94 console.info("The uri of FileUri is " + fileUriObject.toString()); 95 ``` 96 97### getFullDirectoryUri<sup>11+</sup> 98 99getFullDirectoryUri(): string 100 101获取所在路径uri。uri指向文件则返回所在路径的uri,uri指向目录则不处理直接返回原串;uri指向的文件不存在或属性获取失败则返回空串。 102 103如果当前FileUri指向文件,将返回文件所在路径uri。如`xxx/example.txt`,将返回`xxx`。 104 105如果当前FileUri指向目录,将返回当前路径的uri。 106 107**原子化服务API**:从API version 15开始,该接口支持在原子化服务中使用。 108 109**系统能力**:SystemCapability.FileManagement.AppFileService 110 111**返回值:** 112 113| 类型| 说明| 114| --------- |--------| 115| string | 获取所在路径URI,文件获取所在路径URI,目录获取当前路径URI。 | 116 117**错误码:** 118 119以下错误码的详细介绍请参见[文件管理子系统错误码](errorcode-filemanagement.md)。 120 121| 错误码ID| 错误信息| 122| -------- |--------| 123| 13900002 | No such file or directory | 124| 13900012 | Permission denied | 125| 13900042 | Unknown error | 126 127**示例:** 128 129 ```ts 130 import { BusinessError } from '@kit.BasicServicesKit'; 131 try { 132 let path = pathDir + '/test.txt'; 133 let fileUriObject = new fileUri.FileUri(path); 134 let directoryUri = fileUriObject.getFullDirectoryUri(); 135 console.log(`success to getFullDirectoryUri: ${JSON.stringify(directoryUri)}`); 136 } catch (error) { 137 console.error(`failed to getFullDirectoryUri because: ${JSON.stringify(error)}`); 138 } 139 ``` 140 141### isRemoteUri<sup>12+</sup> 142 143isRemoteUri(): boolean 144 145判断当前uri是否是远端uri。 146 147**原子化服务API**:从API version 15开始,该接口支持在原子化服务中使用。 148 149**系统能力**:SystemCapability.FileManagement.AppFileService 150 151**返回值:** 152 153| 类型| 说明| 154| -------- |---------| 155| boolean | - 返回true,表示当前FileUri指向远端文件或目录,如`xxx/example.txt?networkid=xxx`。<br>- 返回false,表示当前FileUri指向本地的文件或目录。 | 156 157**错误码:** 158 159以下错误码的详细介绍请参见[文件管理子系统错误码](errorcode-filemanagement.md)。 160 161| 错误码ID| 错误信息| 162| --------- |--------| 163| 13900042 | Unknown error| 164 165**示例:** 166 167 ```ts 168 import { BusinessError } from '@kit.BasicServicesKit'; 169 function isRemoteUriExample() { 170 let uri = "file://com.example.demo/data/stroage/el2/base/test.txt?networkid=xxxx";//?networkid设备id,远端URI的标识 171 let fileUriObject = new fileUri.FileUri(uri); 172 let ret = fileUriObject.isRemoteUri(); 173 if (ret) { 174 console.log(`It is a remote uri.`); 175 } 176 } 177 ``` 178 179## fileUri.getUriFromPath 180 181getUriFromPath(path: string): string 182 183通过传入的路径path生成应用自己的uri;将path转uri时,路径中的中文及非数字字母的特殊字符将会被编译成对应的ASCII码,拼接在uri中。 184 185**原子化服务API**:从API version 15开始,该接口支持在原子化服务中使用。 186 187**系统能力**:SystemCapability.FileManagement.AppFileService 188 189**参数:** 190 191| 参数名 | 类型 | 必填 | 说明| 192| ------ | ------ | ---- | ------- | 193| path | string | 是 | 文件的沙箱路径。 | 194 195**返回值:** 196 197 | 类型 | 说明| 198 | ------- |------| 199 | string | 通过传入的路径path生成应用自己的uri;将path转uri时,路径中的中文及非数字字母的特殊字符将会被编译成对应的ASCII码,拼接在uri中。 | 200 201**错误码:** 202 203以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 204| 错误码ID| 错误信息 | 205| ---------- | ---------- | 206| 401 | The input parameter is invalid. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types | 207 208**示例:** 209 210 ```ts 211 let filePath = pathDir + "/test"; 212 let uri = fileUri.getUriFromPath(filePath); 213 ```