鸿蒙开发排坑:解决 resourceManager.getRawFileContent() 获取文件内容为空问题

一、问题背景

在鸿蒙开发过程中,我遇到了一个让人头疼的问题。当使用 resourceManager.getRawFileContent() 方法加载 rawfile 目录下的 test.json 文件时,控制台输出了 The file content is empty. 错误信息,并且获取到的 Uint8Array 长度为 0。这意味着文件内容没有被正确加载,让我后续的开发工作陷入了困境。

js 复制代码
// 关键代码片段 
getContext(this).resourceManager.getRawFileContent("test.json").then((value: Uint8Array) => { 
if (value.length === 0) {
    console.error("The file content is empty."); 
   } 
});

二、艰辛探索历程

为了解决这个问题,我花费了整整两天两夜的时间,不断地进行研究和探索。查阅了大量的官方文档、技术博客,尝试了各种可能的解决方案,在代码的海洋里不断地试错和调试。过程中充满了挫败感,但我始终没有放弃,终于找到了问题的解决办法。

三、解决方案

1. 确保路径正确

在使用 resourceManager.getRawFileContent() 方法时,文件路径的正确性至关重要。需要仔细检查文件路径是否准确无误,确保文件确实存在于指定的 rawfile 目录下。同时,要注意路径的大小写,因为在某些系统中,文件路径是区分大小写的。

2. 使用模拟器查看

这是解决问题的关键所在。在开发过程中,我一开始使用的是 Preview 进行查看,结果一直出现文件内容为空的问题。后来尝试使用模拟器进行查看,问题竟然神奇地解决了。推测可能是 Preview 在资源加载方面存在一些局限性,而模拟器更能真实地模拟应用的运行环境,从而避免了此类问题的出现。

四、完整源代码

由于之前的项目一直不成功,我最后干脆新开了一个项目进行测试。以下就是完整的代码:

js 复制代码
import { BusinessError } from '@kit.BasicServicesKit';
import { util, buffer } from '@kit.ArkTS';

@Entry
@Component
struct JSONTestPage {
  private TAG: string = "JSONTestPage";
  @State showText: string = "";

  aboutToAppear(): void {
    this.getRawJson();
  }

  /**
   * 获取JSON
   */
  private getRawJson() {
    try {
      getContext(this).resourceManager.getRawFileContent("test.json").then((value: Uint8Array) => {
        console.log('value:', value);
        if (value.length === 0) {
          console.error("The file content is empty.");
          return;
        }
        let decoder = util.TextDecoder.create('utf-8');
        let json = decoder.decodeToString(value);
        console.info(this.TAG, "json: " + json);
        this.showText = json ;
      }).catch((error: BusinessError) => {
        console.error("getRawFileContent promise error is " + JSON.stringify(error));
      });
    } catch (error) {
      let code = (error as BusinessError).code;
      let message = (error as BusinessError).message;
      console.error(`promise getRawFileContent failed, error code: ${code}, message: ${message}.`);
    }
  }

  build() {
    Scroll() {
      Row() {
        Text(this.showText)
          .fontSize(25)
          .fontWeight(FontWeight.Bold)
          .fontColor('#000')
      }
    }
    .height('100%')
    .width('100%')
  }
}

五、总结

通过这次经历,我深刻体会到了在鸿蒙开发过程中遇到问题时,不能轻易放弃,要耐心地去探索和尝试。同时,要注意开发工具的使用,不同的工具可能会对开发结果产生影响。希望我的经验能对其他鸿蒙开发者有所帮助,避免大家在开发过程中踩同样的坑。如果大家在开发过程中遇到了类似的问题,不妨按照上述方法进行尝试,相信问题一定能够得到解决。

在鸿蒙开发的道路上,我们会不断遇到新的挑战,但只要我们保持积极的心态,勇于探索,就一定能够克服困难,取得成功。让我们一起在鸿蒙开发的海洋中乘风破浪,创造出更加优秀的应用!

大家如果在鸿蒙开发中还有其他问题或者有更好的解决方案,欢迎在评论区留言交流,让我们共同进步!

相关推荐
小雨下雨的雨17 分钟前
Flutter 框架跨平台鸿蒙开发 —— Stack 控件之三维层叠艺术
flutter·华为·harmonyos
Hilaku26 分钟前
我用 Gemini 3 Pro 手搓了一个并发邮件群发神器(附源码)
前端·javascript·github
IT_陈寒27 分钟前
Java性能调优实战:5个被低估却提升30%效率的JVM参数
前端·人工智能·后端
快手技术28 分钟前
AAAI 2026|全面发力!快手斩获 3 篇 Oral,12 篇论文入选!
前端·后端·算法
颜酱29 分钟前
前端算法必备:滑动窗口从入门到很熟练(最长/最短/计数三大类型)
前端·后端·算法
全栈前端老曹38 分钟前
【包管理】npm init 项目名后底层发生了什么的完整逻辑
前端·javascript·npm·node.js·json·包管理·底层原理
HHHHHY44 分钟前
mathjs简单实现一个数学计算公式及校验组件
前端·javascript·vue.js
boooooooom1 小时前
Vue3 provide/inject 跨层级通信:最佳实践与避坑指南
前端·vue.js
一颗烂土豆1 小时前
Vue 3 + Three.js 打造轻量级 3D 图表库 —— chart3
前端·vue.js·数据可视化
青莲8431 小时前
Android 动画机制完整详解
android·前端·面试