鸿蒙应用开发--用户文件 URI
想象你有一本书,URI 就像是这本书的“地址”,告诉系统去哪里找到它。通过理解这些 URI 类型和使用场景,你可以安全高效地操作鸿蒙应用中的文件!:直接操作路径可能不安全,建议使用 API 操作文件。以下是鸿蒙(HarmonyOS)中。:保存应用的配置、缓存等私有文件。:用户通过文件管理器选择文档。:读取相册中的照片或音乐。
·
以下是鸿蒙(HarmonyOS)中 用户文件 URI 的通俗解释,结合生活场景和示例代码说明:
一、URI 的三种常见类型
想象你有一本书,URI 就像是这本书的“地址”,告诉系统去哪里找到它。鸿蒙中的 URI 主要分为三类:
| URI 类型 | 比喻 | 特点 | 示例 |
|---|---|---|---|
| 应用私有文件 URI | 你个人抽屉里的笔记本 | 仅你的应用能访问,无需权限 | internal://app/files/diary.txt |
| 公共媒体库 URI | 图书馆的公开书架上的书 | 需要权限,所有应用都可访问(需用户授权) | file://media/images/photo.jpg |
| 用户选择文件 URI | 朋友借给你的书(临时权限) | 通过文件选择器获得,临时访问权 | datashare://provider/123 |
二、URI 的使用方法
1. 应用私有文件(你的抽屉)
场景:保存应用的配置、缓存等私有文件。
// 写入文件到私有目录
const context = getContext(this);
const filePath = context.filesDir + '/config.txt'; // 生成URI:internal://app/files/config.txt
// 写入内容
fileIo.writeText(filePath, '这是我的秘密配置');
2. 公共媒体文件(公共书架)
场景:读取相册中的照片或音乐。
// 选择相册图片(需要权限)
const picker = new photoAccessHelper.PhotoViewPicker();
const result = await picker.select({ MIMEType: 'image/*' });
const mediaUri = result.photoUris[0]; // 类似:file://media/images/sunset.jpg
// 加载图片
const imageSource = photoAccessHelper.createImageSource(mediaUri);
const pixelMap = await imageSource.createPixelMap();
Image(pixelMap); // 显示图片
3. 用户选择的文件(借来的书)
场景:用户通过文件管理器选择文档。
// 通过文件选择器获取URI
const filePicker = new filePicker.FilePicker();
const uris = await filePicker.select({ fileTypes: ['.pdf'] });
const selectedFileUri = uris[0]; // 类似:datashare://com.example.provider/123
// 读取文件内容
const file = await fileIo.open(selectedFileUri, fileIo.OpenMode.READ_ONLY);
const content = await fileIo.readText(file.fd);
fileIo.close(file.fd);
三、URI 的通用操作
1. 判断文件类型
if (uri.startsWith('internal://app')) {
console.log('这是应用私有文件');
} else if (uri.startsWith('file://media')) {
console.log('这是公共媒体文件');
} else if (uri.startsWith('datashare://')) {
console.log('这是用户临时选择的文件');
}
2. 转换真实路径
注意:直接操作路径可能不安全,建议使用 API 操作文件。
import { fileUri } from '@kit.CoreFileKit';
// 将URI转为真实路径(仅限部分URI类型)
const realPath = fileUri.getRealPath(uri);
四、注意事项(避坑指南)
-
权限问题
- 访问公共文件需在
config.json添加权限:"reqPermissions": [ { "name": "ohos.permission.READ_MEDIA" } ]
- 访问公共文件需在
-
临时权限
- 用户选择的文件 URI (
datashare://) 可能失效,需及时处理。
- 用户选择的文件 URI (
-
资源释放
// 用完 PixelMap 要释放 pixelMap.release(); // 文件操作后要关闭 fileIo.close(fd);
五、生活场景类比
- 私有文件:像你上锁的日记本,只有你自己能打开。
- 公共媒体:像客厅的电视,家人(其他应用)想看需要你同意。
- 用户选择文件:像朋友借你的 U 盘,用完后记得归还(释放资源)。
通过理解这些 URI 类型和使用场景,你可以安全高效地操作鸿蒙应用中的文件!
更多推荐



所有评论(0)