鸿蒙编译框架@ohos/hvigor FileUtil用法

@ohos/hvigor FileUtil用法

在鸿蒙(HarmonyOS)开发中,@ohos/hvigor 的 FileUtil 是用于文件操作的实用工具类,提供了跨平台的文件读写、路径处理等常用方法。以下是其核心用法和示例:


一、核心方法说明

|-----|------|---|-----------------------------------|----------------------------------------------------------------------------|---|
| 方法名 | 功能描述 | | --------------------------------- | -------------------------------------------------------------------------- | |

| readFile(path: string) | 异步读取文件内容(返回 Promise<string>) |

| writeFile(path: string, content: string) | 异步写入文件内容(自动创建目录) |

| copyFile(src: string, dest: string) | 异步复制文件(支持覆盖) |

| deleteFile(path: string) | 异步删除文件 | |

| mkdirs(dirPath: string) | 递归创建目录 |

| exists(path: string) | 检查文件或目录是否存在(返回 Promise<boolean>) |

| listFiles(dirPath: string) | 列出目录下所有文件(返回 Promise<string[]>) |

| normalizePath(path: string) | 标准化路径(跨平台处理路径分隔符) |


二、基础用法示例

1. 读取文件内容
复制代码
import { FileUtil } from '@ohos/hvigor';

async function readConfig() {
  const content = await FileUtil.readFile('src/main/resources/config.json');
  console.log('配置文件内容:', content);
}
2. 写入文件
复制代码
async function generateVersionFile() {
  const version = '1.0.0';
  await FileUtil.writeFile('build/version.txt', `Version: ${version}`);
}
3. 复制资源文件
复制代码
async function copyAssets() {
  await FileUtil.copyFile('assets/raw/icon.png', 'build/res/icon.png');
}
4. 递归创建目录
复制代码
async function prepareDirs() {
  await FileUtil.mkdirs('build/generated/code');
}

三、实战场景

场景 1:动态生成配置文件
复制代码
import { FileUtil } from '@ohos/hvigor';

class ConfigGeneratorPlugin implements HvigorPlugin {
  apply(context: HvigorContext) {
    context.taskRegistry.registerTask('generateConfig', async () => {
      const config = {
        apiUrl: 'https://api.example.com',
        debug: context.getBuildType() === 'debug'
      };
      await FileUtil.writeFile(
        'build/generated/config.json', 
        JSON.stringify(config, null, 2)
      );
    });
  }
}
场景 2:清理构建产物
复制代码
async function cleanBuild() {
  const files = await FileUtil.listFiles('build');
  for (const file of files) {
    await FileUtil.deleteFile(file);
  }
}

四、路径处理技巧

结合 FileUtil.normalizePath 处理跨平台路径:

复制代码
const winPath = 'src\\main\\resources';
const unixPath = FileUtil.normalizePath(winPath); // 转换为 'src/main/resources'

五、错误处理

复制代码
async function safeRead(path: string) {
  try {
    if (await FileUtil.exists(path)) {
      return await FileUtil.readFile(path);
    }
    return '';
  } catch (err) {
    console.error('文件操作失败:', err.message);
    throw err;
  }
}

六、与 Node.js fs 模块对比

| 特性 | FileUtil | Node.js fs | |---------------------|-------------------------------------|--------------------------------|

| API 风格 | Promise-based | Callback/Promise/Sync 混合 |

| 目录自动创建 | 写文件时自动创建父目录 | 需要手动处理 |

| 跨平台路径 | 内置 normalizePath | 需依赖 path 模块 |

| 鸿蒙集成 | 深度集成 Hvigor 构建流程 | 通用文件操作 |


七、注意事项

  1. 路径基准 :相对路径基于 模块根目录 (含 hvigorfile.ts 的目录)
  2. 性能优化 :批量操作建议使用 listFiles + 循环处理
  3. 权限问题:确保对目标目录有写权限

通过 FileUtil 可以更便捷地实现构建流程中的文件操作,建议结合 Hvigor 官方文档 深入使用。

相关推荐
Sirius_Ji2 小时前
# 一份鸿蒙原生支持硬解的 ffmpeg 开发基座
harmonyos
贾伟康3 小时前
HarmonyOS API 26 Navigation路由栈上限:stackSizeLimit、过载保护与容量观测
harmonyos·arkts·navigation·navpathstack·api26
江华森8 小时前
把鸿蒙云手机调试的 5 个坑写成 Skill:12 项检查清单与报错决策树
harmonyos
木木子229 小时前
用华为云码道构建校园导航应用「新生通」:从需求分析到工程落地
华为·华为云·harmonyos
贾伟康11 小时前
HarmonyOS API 26 Navigation 自适应模式:mode、分栏切换与窗口断点治理
harmonyos·arkts·arkui·navigation·自适应布局
贾伟康11 小时前
【转盘决定吧|07】HarmonyOS ArkTS 6.0.2.130 趣味题库:场景分类、随机选择与详情页解耦
harmonyos·arkts·路由·数据建模·arkui
贾伟康11 小时前
【电路实验模拟|03】HarmonyOS ArkTS 交通灯实战:用定时状态切换红黄绿灯
harmonyos·arkts·canvas·arkui·交通灯
贾伟康1 天前
HarmonyOS API 26 嵌套 Navigation:getParent、父子栈边界与返回分发
harmonyos·arkts·navigation·嵌套路由·navpathstack
行者-全栈开发1 天前
【鸿蒙心迹】多线程并发实战——TaskPool 与 Worker 选型与踩坑(HarmonyOS 7.x)
华为·harmonyos·多线程并发·worker·taskpool·线程通信·harmonyos 并发
OH_TPC1 天前
@ohos/aki 源码解读(一):一行绑定背后,宏、模板与索引分发
harmonyos