HarmonyOS鸿蒙Next中在hvigor插件中如何实现文件的增删改查操作
HarmonyOS鸿蒙Next中在hvigor插件中如何实现文件的增删改查操作 很多的应用场景,比如,在构建前,针对代码规范进行检查,如果有不符合规范的地方,输出到一个错误文件中,或者,需要针对项目中的代码进行动态修改等等场景,hvigor插件开发中如何去实现呢?我们就一起来看一下。
文件操作,有两种方式,一种是使用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方法,来确保文件存在,不存在就创建。
使用方式很简单,如下简单举例,文件不存在,构建后,就会直接创建一个。

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插件中,文件的增删改查操作主要通过Node.js的fs模块实现。例如,使用fs.readFileSync读取文件,fs.writeFileSync写入或修改文件,fs.unlinkSync删除文件,以及fs.existsSync检查文件是否存在。操作时需注意文件路径的正确性及权限问题。
在HarmonyOS Next的hvigor插件开发中,可以通过Node.js的fs模块或hvigor提供的文件API实现文件操作。
核心方法:
- 引入模块:使用
require('fs')或require('node:fs/promises')进行异步文件操作。 - 关键操作:
- 读取文件:
fs.readFile() - 写入文件:
fs.writeFile()(覆盖写入) - 追加内容:
fs.appendFile() - 删除文件:
fs.unlink() - 检查存在:
fs.existsSync()
- 读取文件:
代码规范检查示例:
const fs = require('fs');
const path = require('path');
// 检查代码规范并输出错误文件
function checkCodeStyle(projectDir) {
const errorLog = path.join(projectDir, 'code_errors.txt');
const sourceFiles = getSourceFiles(projectDir);
let errors = [];
sourceFiles.forEach(file => {
const content = fs.readFileSync(file, 'utf8');
// 执行规范检查逻辑
if (hasStyleViolation(content)) {
errors.push(`规范错误: ${file}`);
}
});
if (errors.length > 0) {
fs.writeFileSync(errorLog, errors.join('\n'));
console.log(`发现${errors.length}个规范问题,已写入${errorLog}`);
}
}
动态修改代码示例:
// 修改项目中的特定代码
function modifySourceFiles(projectDir) {
const targetFile = path.join(projectDir, 'src/main/ets/MainPage.ets');
if (fs.existsSync(targetFile)) {
let content = fs.readFileSync(targetFile, 'utf8');
// 执行代码替换逻辑
content = content.replace(/oldPattern/g, 'newPattern');
fs.writeFileSync(targetFile, content);
}
}
插件集成:
在hvigor插件的task或hook中调用上述函数,例如在preBuild阶段执行代码检查。
注意事项:
- 使用同步方法时注意性能影响
- 文件路径建议使用
path.join()进行拼接 - 重要文件操作前建议备份
- 考虑跨平台路径兼容性
通过组合这些基础操作,可以实现代码规范检查、自动化代码修改等构建时文件处理需求。

