HarmonyOS鸿蒙Next中一直无法读取本地文件,一直显示文件不存在?你们可知小白的苦

HarmonyOS鸿蒙Next中一直无法读取本地文件,一直显示文件不存在?你们可知小白的苦

我左边rawfile里面那么多文件,为什么一直说找不到文件。难道官方给的示例代码,没有给全?下面是鸿蒙官方的代码啊。我后面加了组件便于显示。

import fs from '@ohos.file.fs';
import common from '@ohos.app.ability.common';
@Entry
@Component
struct xx {
  build() {Column(){
    Button('dddddddd').onClick(()=>{
      let context = getContext(this) as common.UIAbilityContext;// 获取应用文件路径
      let filesDir = context.filesDir;
      let options = { recursion: false, listNum: 0, // 查看文件列表
        filter: { suffix: ['.png', '.jpg', '.txt'],          // 匹配文件后缀名为'.png','.jpg','.txt'
          displayName: ['test*'],                    // 匹配文件全名以'test'开头
          fileSizeOver: 0,                           // 匹配文件大小大于等于0
          lastModifiedAfter: new Date(0).getTime(),}, } // 匹配文件最近修改时间在1970年1月1日之后
      let files = fs.listFileSync(filesDir, options);
      for (let i = 0; i < files.length; i++) { console.info(`The name of file: ${files[i]}`);}
      console.log(`The name of ${files[0]}`)
    })
  }
  }
}

10 回复

rawfile 文件是另外的读取方法。你这样读取是读取应用沙箱里面的文件。

try {
  this.context.resourceManager.getRawFd("test.xml").then(value => {
      let fd = value.fd;
      let offset = value.offset;
      let length = value.length;
  }).catch(error => {
      console.log(`promise getRawFd error error code: ${error.code}, message: ${error.message}.`);
  });
} catch (error) {
  console.error(`promise getRawFd failed, error code: ${error.code}, message: ${error.message}.`);
};

更多关于HarmonyOS鸿蒙Next中一直无法读取本地文件,一直显示文件不存在?你们可知小白的苦的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


@旺旺崔冰冰,谢谢啊,能显示具体某个文件的内容了。但

我是想显示rawfile文件夹下的所有文件名,按照官方给的代码,不好使啊。还没有vb里面命令好使,里面一个dir(’*’)就可以解决了。没想到鸿蒙命令这么复杂反锁。

前辈们帮忙一下吧。

大神们,谁能帮帮我?

确实读个本地文件各种费劲。折磨人,这鸿蒙开发为啥不把这些常用操作封装好,iOS开发中很容易办到的事在这尽来回折腾不明白,唉想放弃。

您好,可以使用如下方式调用

getContext(this).resourceManager.getRawFileContent("area.json", (error: BusinessError, value: Uint8Array) => {
  if (error != null) {
    ToastUtil.showToast(`获取区域数据出错, 错误编码: ${error.code}, 原因: ${error.message}.`);
  } else {
    //转码
    let textCoder = util.TextDecoder.create('utf-8', { ignoreBOM: true });
    let vStr = textCoder.decodeWithStream(value, { stream: false });
  }
});

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:BV1S4411E7LY/?p=17

我替换了代码,如图,context 没有定义怎么办?

在HarmonyOS鸿蒙Next中,无法读取本地文件并显示文件不存在的问题,可能由以下原因导致:

  1. 文件路径错误:确保文件路径正确,包括文件名和扩展名。鸿蒙系统对路径大小写敏感,需确保路径与文件系统一致。

  2. 权限问题:检查应用是否具备读取本地文件的权限。在config.json中,确保已声明ohos.permission.READ_USER_STORAGE权限,并在运行时动态申请。

  3. 文件系统访问限制:鸿蒙系统对文件系统访问有严格限制,确保文件位于应用可访问的目录,如内部存储的/data/data/<package_name>/或外部存储的/storage/emulated/0/

  4. 文件未正确创建或已删除:确认文件已正确创建且未被删除。可通过文件管理器检查文件是否存在。

  5. 应用沙盒机制:鸿蒙系统采用应用沙盒机制,应用只能访问自身沙盒内的文件。确保文件位于应用沙盒内,或通过FilePicker等系统组件访问外部文件。

  6. 系统版本兼容性:某些系统版本可能存在文件读取问题,确保系统和应用均为最新版本。

  7. 文件编码问题:文件编码不匹配可能导致读取失败,确保文件编码与读取代码一致。

  8. 文件锁定或占用:文件被其他进程锁定或占用时无法读取,确保文件未被其他应用占用。

  9. 存储设备状态:外部存储设备未挂载或损坏可能导致读取失败,确保存储设备状态正常。

  10. 日志排查:通过HiLog查看详细错误日志,定位具体问题。

以上是可能导致鸿蒙Next无法读取本地文件的原因,需逐一排查。

在HarmonyOS鸿蒙Next中无法读取本地文件并显示文件不存在,可能是以下原因:

  1. 文件路径错误,请检查路径是否正确;
  2. 文件权限未开启,确保应用有读取文件的权限;
  3. 文件被移动或删除,确认文件是否仍在原位置。

建议使用绝对路径,并在代码中添加异常处理,以便更好地定位问题。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!