HarmonyOS 鸿蒙Next中读取download文件夹所有文件

HarmonyOS 鸿蒙Next中读取download文件夹所有文件 请问下可以读取公共目录download文件夹的所有文件吗?不用picker的方式,还有其他的哪种方法可以读取?

4 回复

在 HarmonyOS NEXT(API 12以及后续版本)里,只要你的应用没有申请 ohos.permission.READ_MEDIA 等受限权限,或者设备运行在“普通模式”(非设备所有者/系统应用),系统就不再允许你用文件路径直接把公共目录(/storage/emulated/0/Download 及其子目录)扫出来

更多关于HarmonyOS 鸿蒙Next中读取download文件夹所有文件的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS中,可以直接读取公共目录Download文件夹中的文件,但需要满足以下条件:

权限配置需在module.json5中添加权限声明:

"requestPermissions": [
  {
    "name": "ohos.permission.WRITE_MEDIA"
  }
]

并通过动态弹窗申请用户授权

路径获取方式通过目录环境能力接口获取公共目录路径:

import { environment } from '@kit.CoreFileKit';
// 获取Download目录路径
let downloadDirUri = environment.getPublicDirectory(environment.DirectoryType.DOWNLOAD);

需确认设备支持SystemCapability.FileManagement.File.Environment.FolderObtain能力(当前仅支持2in1设备)

文件遍历与读取可通过基础文件API遍历目录:

import { fileIo } from '@kit.CoreFileKit';
// 获取目录下的文件列表
let dir = fileIo.opendirSync(downloadDirUri);
let entry = dir.readSync();
while (entry !== undefined) {
  console.info("File name:" + entry.name);
  entry = dir.readSync();
}

注意事项:

直接使用/storage/media/100/local/files/Docs/Download/物理路径存在兼容性问题,建议通过环境接口获取标准路径

访问子目录时需递归遍历,目前API暂不支持直接访问多级子目录

部分设备需要通过hdc命令授权访问特殊目录

必须确保用户已授权WRITE_MEDIA权限,否则会抛出安全异常

开发文档参考链接: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/native-environment-guidelines

https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-file-environment

在HarmonyOS Next中,读取download文件夹文件需使用@ohos.file.fs@ohos.file.fileuri模块。通过getContext(this).filesDir获取应用沙箱路径,结合path模块拼接download目录。使用fs.listFile异步列出文件列表,可获取文件名、大小等属性。注意需申请ohos.permission.READ_USER_STORAGE权限。操作需在UI主线程外执行。

在HarmonyOS Next中,可以通过FileManager API访问公共目录(如Download文件夹)。使用ohos.file.fs模块的listFile方法可以获取目录下所有文件列表,无需依赖picker。示例代码:

import fs from '@ohos.file.fs';

async function listDownloadFiles() {
  const downloadDir = '下载'; // 公共目录路径
  try {
    let dir = await fs.openDir(downloadDir);
    let files = await dir.read();
    files.forEach(file => {
      console.log(file.name); // 输出文件名
    });
    dir.close();
  } catch (err) {
    console.error('读取失败: ' + err);
  }
}

注意:需申请ohos.permission.READ_MEDIA权限,并在module.json5中配置。此方式直接操作文件系统,适合批量处理场景。

回到顶部