HarmonyOS鸿蒙Next中想要使用 DocumentViewPicker 或 saveFilePicker 创建/保存文件

HarmonyOS鸿蒙Next中想要使用 DocumentViewPicker 或 saveFilePicker 创建/保存文件 【问题描述】:想要使用 DocumentViewPicker 或 saveFilePicker 创建/保存文件,获取到系统返回的 file:// 格式 URI(例如 file://docs/storage/…)。随后 App 需要立即读取该文件的全部内容以显示在编辑器中。

【问题现象】:但是在使用 Picker 返回的 URI 进行文件读取时,无法获取文件元数据(大小),导致无法创建准确的 ArrayBuffer 进行读取

【版本信息】:6.0(20)

2 回复

在HarmonyOS Next中,DocumentViewPicker用于选择文件,saveFilePicker用于保存文件。两者均基于ArkTS实现,通过PickerMode参数控制操作类型。调用saveFilePicker时需配置saveOptions指定文件名和文件类型,系统返回保存路径的URI。DocumentViewPicker通过viewOptions设置文件选择条件,返回所选文件的URI列表。使用前需在module.json5中声明ohos.permission.READ_MEDIA和ohos.permission.WRITE_MEDIA权限。文件操作需使用@ohos.file.fs模块的API处理。

更多关于HarmonyOS鸿蒙Next中想要使用 DocumentViewPicker 或 saveFilePicker 创建/保存文件的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中,使用DocumentViewPicker或saveFilePicker获取file://格式URI后,可以通过以下方式读取文件内容:

  1. 使用fs.openSync()打开文件描述符
  2. 通过fs.fstatSync()获取文件元数据(包括大小)
  3. 创建准确大小的ArrayBuffer
  4. 使用fs.readSync()读取文件内容

示例代码:

let file = fs.openSync(uri, fs.OpenMode.READ_ONLY);
let stat = fs.fstatSync(file.fd);
let buffer = new ArrayBuffer(stat.size);
fs.readSync(file.fd, buffer);
fs.closeSync(file.fd);

这样可以确保根据实际文件大小创建ArrayBuffer,避免读取失败。注意处理文件操作异常和权限问题。

回到顶部