鸿蒙Next如何导出getcontext().resourcemanager.getrawfilelist获取的所有文件到本地

在鸿蒙Next开发中,使用getContext().resourceManager.getRawFileList()可以获取资源目录下的文件列表,但如何将这些文件批量导出到本地存储呢?比如我想把rawfile文件夹中的所有文件复制到设备的/data/user/0/包名/files/目录下,有没有完整的代码示例或最佳实践?需要注意哪些权限问题?

2 回复

鸿蒙Next中,可通过以下步骤导出getContext().resourceManager.getRawFileList()获取的文件:

  1. 获取文件列表

    let context = getContext(this);
    let resourceMgr = context.resourceManager;
    let rawFileList = await resourceMgr.getRawFileList();
    
  2. 遍历并复制文件: 使用fs模块将rawfile://路径的文件复制到应用沙箱目录:

    import fs from '[@ohos](/user/ohos).file.fs';
    
    for (let fileName of rawFileList) {
      let srcPath = `rawfile:///${fileName}`;
      let destPath = `${context.filesDir}/${fileName}`;
      // 使用resourceManager.getRawFd获取文件描述符后复制
      let fileDescriptor = await resourceMgr.getRawFd(fileName);
      // 通过fs.copyFileSync等API实现文件复制
    }
    
  3. 注意事项

    • 需申请ohos.permission.READ_MEDIA权限。
    • 目标路径需使用应用沙箱路径(如filesDir)。
    • 实际路径操作需参考最新API文档调整。

完成后即可在filesDir目录下找到导出的文件。

更多关于鸿蒙Next如何导出getcontext().resourcemanager.getrawfilelist获取的所有文件到本地的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在鸿蒙Next中,使用getContext().resourceManager.getRawFileList()获取rawfile目录下的文件列表后,需要逐个读取文件内容并写入本地存储。以下是实现步骤和代码示例:

核心步骤:

  1. 获取ResourceManager和文件列表
  2. 创建目标目录(如果需要)
  3. 遍历文件列表,逐个读取并写入本地

代码示例:

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

async function exportRawFiles(): Promise<void> {
  const context = getContext(this) as common.UIAbilityContext;
  const resMgr = context.resourceManager;
  
  try {
    // 1. 获取rawfile文件列表
    const rawFileList: Array<string> = await resMgr.getRawFileList();
    
    // 2. 准备本地存储路径
    const localDir = context.filesDir + '/exported_rawfiles/'; // 应用沙箱目录
    if (!fs.accessSync(localDir)) {
      fs.mkdirSync(localDir);
    }

    // 3. 遍历导出文件
    for (const fileName of rawFileList) {
      // 读取rawfile内容
      const rawFileContent = await resMgr.getRawFileContent(fileName);
      
      // 构建本地文件路径
      const localPath = localDir + fileName;
      
      // 写入本地文件
      const file = fs.openSync(localPath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
      fs.writeSync(file.fd, rawFileContent);
      fs.closeSync(file);
    }
    
    console.log(`成功导出 ${rawFileList.length} 个文件到: ${localDir}`);
  } catch (err) {
    console.error('导出失败:', err);
  }
}

注意事项:

  1. 需要申请存储权限(如果导出到公共目录)
  2. 文件较大时应使用流式操作
  3. 目标目录需确保有写入权限
  4. 实际路径根据具体需求调整(沙箱目录或公共目录)

权限配置(如需写入公共目录):

module.json5中添加:

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

此方法会将rawfile目录下的所有文件导出到应用沙箱的files/exported_rawfiles/目录中。

回到顶部