HarmonyOS鸿蒙Next原生如何读取flutter的沙盒路径下的文件

HarmonyOS鸿蒙Next原生如何读取flutter的沙盒路径下的文件 目前做法

  • flutter 通过getApplicationDocumentsDirectory将数据存储在沙盒路径下
  • 鸿蒙原生去读取 flutter 沙盒路径下的文件报 {“code”:13900002}

具体核心代码

flutter 端:

final directory = await getApplicationDocumentsDirectory(); Log.d(‘KeyStorage 获取存储文件路径: ${directory.path}/$_fileName’); return File(’${directory.path}/$_fileName’); // 打印 KeyStorage 获取存储文件路径: /data/storage/el2/base/files/flutter/keys.json

原生端:

// filePath = ‘/data/storage/el2/base/files/flutter/keys.json’; const file = fileIo.openSync(filePath, fileIo.OpenMode.READ_ONLY); if (!file) { hilog.info(0xFF00, “测试”, ‘[KeyStorage] 文件不存在,返回空列表’); return []; } const stat = fileIo.statSync(filePath); const buffer = new ArrayBuffer(stat.size); const readSize = fileIo.readSync(file.fd, buffer); fileIo.closeSync(file);


更多关于HarmonyOS鸿蒙Next原生如何读取flutter的沙盒路径下的文件的实战教程也可以访问 https://www.itying.com/category-92-b0.html

4 回复

【解决方案】

开发者您好,报错13900002的原因是文件或目录不存在,但如果路径解析异常也可能出现该情况,根据官方文档内容,fileIo模块从API version 9开始废弃,建议您使用@ohos.file.fs替代:

const file = fileIo.openSync(filePath, fileIo.OpenMode.READ_ONLY);

fs模块替代旧接口:

const file = fs.openSync(filePath, fs.OpenMode.READ_ONLY);

更多关于HarmonyOS鸿蒙Next原生如何读取flutter的沙盒路径下的文件的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


【问题背景】:读取flutter 的沙盒路径下的文件报了13900002这个错误

【解决思路】:

cke_130.png

另外要注意的是:fileIo模块从API version 9开始废弃,建议您使用@ohos.file.fs替代

【沙箱目录/文件常见操作】

在HarmonyOS Next中,可通过Flutter的path_provider插件获取沙盒路径。使用getApplicationDocumentsDirectory()方法获取应用文档目录路径,返回的Directory对象可用于文件读写操作。通过File类结合路径字符串可直接访问沙盒内文件内容。注意需在pubspec.yaml中配置path_provider依赖,并确保权限设置正确。

在HarmonyOS Next中,应用沙盒路径访问权限是严格隔离的。错误码13900002表示权限不足,无法跨应用访问Flutter沙盒路径/data/storage/el2/base/files/flutter/

解决方案:

  1. 使用HarmonyOS统一数据管理接口:通过DataShareHelper实现跨应用数据共享,将Flutter数据发布为共享数据。
  2. 文件路径映射:通过context.filesDir获取当前应用的文件路径,确保Flutter和原生模块使用相同的存储空间。
  3. 避免直接路径访问:改用@ohos.file.fsAPI配合正确的URI方案进行文件操作。

推荐使用DataShare方案,在Flutter端通过DataSharePredicates将数据写入共享数据库,原生端通过createDataShareHelper建立连接后查询数据。这样既符合安全规范,又能实现数据互通。

回到顶部