HarmonyOS鸿蒙Next中为什么我按照官方的示例读取到的字节为0

HarmonyOS鸿蒙Next中为什么我按照官方的示例读取到的字节为0

this.getUIContext().getHostContext()?.resourceManager.getRawFileContent('BannerData.json').then(value => {
  this.bannerList = JSON.parse(bufferToString(value)) as BannerClass[];
});
2 回复

在HarmonyOS Next中,读取字节为0通常是由于文件路径错误、权限未配置或文件为空所致。请检查文件是否存在于指定路径,并确认ohos.permission.READ_USER_STORAGE权限已在module.json5中正确声明。另外,确保使用正确的API(如fs.openSync)打开文件并调用fs.readSync进行读取操作。

更多关于HarmonyOS鸿蒙Next中为什么我按照官方的示例读取到的字节为0的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中,使用getRawFileContent读取文件返回字节为0,通常有以下原因:

  1. 文件路径或名称错误:确认BannerData.json是否位于resources/rawfile目录下,且文件名大小写匹配(HarmonyOS对资源路径区分大小写)。

  2. 异步加载未完成getRawFileContent返回Promise,需确保在then回调中处理数据。检查是否有未捕获的异常导致中断。

  3. bufferToString转换问题value为ArrayBuffer类型,需通过new TextDecoder().decode(value)转换为字符串,再使用JSON.parse。示例代码中的bufferToString需确认是自定义方法还是API,若未正确定义会导致解析失败。

  4. 资源未同步或打包问题:开发阶段修改文件后需重新编译(DevEco Studio中点击Build),否则可能读取到旧缓存或空内容。

建议直接使用以下标准代码替换:

this.getUIContext().getHostContext()?.resourceManager.getRawFileContent('BannerData.json').then(value => {
  const str = new TextDecoder().decode(value); // 明确转换ArrayBuffer
  this.bannerList = JSON.parse(str) as BannerClass[];
}).catch(error => {
  console.error("读取文件失败:", error); // 添加错误捕获
});

若问题仍存在,检查DevEco Studio的编译日志,确认json文件是否成功打包至HAP中。

回到顶部