HarmonyOS 鸿蒙Next中hvigor插件如何进行文件操作

HarmonyOS 鸿蒙Next中hvigor插件如何进行文件操作 有很多的应用场景,比如,在构建前,针对代码规范进行检查,如果有不符合规范的地方,输出到一个错误文件中,或者,需要针对项目中的代码进行动态修改等等场景,hvigor插件开发中如何去实现呢?这就是这篇问答要概述的内容,hvigor插件中的文件操作。

3 回复

文件操作,有两种方式,一种是使用node中的fs模块,它内部提供了大量的方法来读取、写入、修改、删除文件和目录,以及获取文件信息等操作,使用它,便可以实现我们对文件的操作;除此之外,官方也给我们提供了文件操作的Api,FileUtil工具类。

当然了,目前的FileUtil工具类,只支持一些基本的文件操作,虽说没有fs模块完善,但也基本上能够满足我们对文件操作的需求。

使用FileUtil之前,我们先导入模块,如下代码所示:

import { FileUtil } from '@ohos/hvigor';

主要方法概述

1、判断文件路径是否存在

使用exist方法来判断一个文件地址是否存在,可以是一个文件夹,也可以是一个文件,如下代码所示。

很多的场景之下,我们都需要用到这个方法,比如创建文件之前需要判断,复制文件之前也需要进行判断。

 const filePath = node.getNodePath() + "/test.json";
      if (FileUtil.exist(filePath)) {
        console.log("File exists");
      } else {
        console.log("File doesn't exist");
      }

2、判断是否是目录

const filePath = node.getNodePath() + "/test.json";
      if (FileUtil.isDictionary(filePath)) {
        console.log("It is a directory");
      } else {
        console.log("It is not a directory");
      }

3、判断是否是文件

 const filePath = node.getNodePath() + "/test.json";
      if (FileUtil.isFile(filePath)) {
        console.log("It is a directory");
      } else {
        console.log("It is not a directory");
      }

4、确保目录或文件存在

有很多场景下,我们的需求是,必须保证某一个目录或者某一个文件必须存在,如果不存在就去创建,按照以往的方式,我们会先判断此目录或文件是否存在,不存在就去创建,一般需要两步来实现,但是,在FileUtil中,我们一步就可以搞定。

使用ensureDirSync方法,来确保目录存在,不存在就创建;使用ensureFileSync方法,来确保文件存在,不存在就创建。

使用方式很简单,如下简单举例,文件不存在,构建后,就会直接创建一个。

cke_2686.png

5、读取文件

读取文件,FileUtil提供了,三种读取方式,第一种是读取Json5文件readJson5()方法,第二种是同步读取文件readFileSync()方法,第三种是异步读取文件readFile()方法。

json5文件的读取,会给我们直接返回json对象,我们直接可以进行对象操作,非常的方便。

 const jsonContent = FileUtil.readJson5(filePath);

同步读取文件比较简单,我们直接传入一个文件地址即可。

 const content = FileUtil.readFileSync(filePath);

异步读取,会返回一个Promise<Buffer>,我们可以使用then来异步获取,当然,也可以使用async和await的方式。

const content = await FileUtil.readFile(filePath);

6、写入文件

写入文件,目前官方也是给出了两种方式,一种是同步,一种返回Promise<void>的异步形式。

同步写入:

 FileUtil.writeFileSync(filePath, "content")

异步写入:

FileUtil.writeFile(filePath, "content");

无论同步还是异步,在文件写入之前,请一定要确保文件存在,否则会报错误,可以在写入之前执行FileUtil.ensureFileSync(filePath)函数,确保文件存在。

7、复制文件

复制文件,目前官方也提供了两种方式,分别是同步复制和异步复制。

同步复制:

 FileUtil.copyFileSync(filePath, copyFilePath);

异步复制:

 FileUtil.copyFile(filePath, copyFilePath);

相关总结

FileUtil工具类提供的方法都是十分的简单,在typescript项目开发的时候,可能会有报错,不过不要担心,集成到DevEco Studio中是可以正常执行的,不过在写的时候,大家可以在DevEco Studio中先验证,无问题后再复制到typescript项目中打插件包。

更多关于HarmonyOS 鸿蒙Next中hvigor插件如何进行文件操作的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中,hvigor插件使用ArkTS进行文件操作。通过@ohos.file.fs模块的API实现,如fs.openSyncfs.writeSyncfs.readSyncfs.closeSync。操作需遵循应用沙箱路径规则,使用context对象获取文件目录,例如context.filesDir。确保在module.json5中声明必要的文件权限。

在HarmonyOS Next的hvigor插件开发中,文件操作主要通过Node.js的fs模块以及hvigor提供的项目模型API来实现。以下是关键实现方式:

  1. 使用Node.js原生模块

    • 通过require('fs')引入文件系统模块,可直接使用readFileSyncwriteFileSyncreaddirSync等方法进行文件读写和目录遍历。
    • 示例:检查代码规范时,可读取源码文件内容,校验后通过fs.writeFileSync输出错误报告。
  2. 操作项目文件路径

    • 通过project.getProjectDir()获取项目根目录路径。
    • 使用project.file('src/main/ets/')定位具体目录或文件。
  3. 动态修改代码文件

    • 结合fs模块读取文件内容,使用字符串替换或AST解析(如@babel/parser)进行代码分析与修改。
    • 修改完成后,通过fs.writeFileSync写回原文件。
  4. 构建生命周期集成

    • 在插件的task中注册doFirstdoLast动作,在构建前或后执行文件操作。
    • 示例:在doFirst中执行代码检查,若发现规范问题,可抛出错误或生成报告文件。
  5. 处理资源文件

    • 对于非代码文件(如配置文件),可通过fs模块直接读写,或使用copySync(需引入fs-extra)进行批量操作。

注意事项:

  • 文件操作建议在插件的taskhook中执行,确保构建流程可控。
  • 涉及源码修改时,需注意编码格式(建议UTF-8)和路径兼容性(Windows/Unix)。
  • 可结合path模块处理路径拼接,避免硬编码。

示例片段(构建前检查代码):

const fs = require('fs');
const path = require('path');

module.exports = {
    task: (project) => {
        project.task('codeCheck', () => {
            const srcDir = project.file('src/main/ets/');
            const reportPath = path.join(project.getProjectDir(), 'code_errors.txt');
            const errors = [];
            // 遍历文件并检查代码规范
            // 若发现错误,将信息存入errors数组
            if (errors.length > 0) {
                fs.writeFileSync(reportPath, errors.join('\n'));
                throw new Error('代码规范检查失败,详见报告文件');
            }
        });
    }
};

此方式可灵活集成到构建流程,实现自动化文件处理。

回到顶部