当前位置: 首页 > article >正文

鸿蒙编译框架@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 官方文档 深入使用。

相关文章:

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

ohos/hvigor FileUtil用法 在鸿蒙&#xff08;HarmonyOS&#xff09;开发中&#xff0c;ohos/hvigor 的 FileUtil 是用于文件操作的实用工具类&#xff0c;提供了跨平台的文件读写、路径处理等常用方法。以下是其核心用法和示例&#xff1a; 一、核心方法说明 方法名功能描…...

Hoppscotch 开源API 开发工具

Hoppscotch 是一个开源的 API 开发工具&#xff0c;旨在为开发者提供一个轻量级、快速且功能丰富的 API 开发和调试平台。以下是对其主要特性和功能的详细介绍&#xff1a; 1. 轻量级与高效 Hoppscotch 采用简约的 UI 设计&#xff0c;注重易用性和高效性。它支持实时发送请求…...

Infura 简介

文章目录 Infura 简介Infura 的主要功能Infura 的替代方案&#xff08;类似服务&#xff09;AlchemyQuickNodeAnkrMoralisPocket Network 什么时候选择 Infura&#xff1f; Infura 简介 Infura 是一个 区块链基础设施即服务&#xff08;BaaS, Blockchain as a Service&#xf…...

【芯片验证】面试题·对深度为60的数组进行复杂约束的技巧

朋友发给我的芯片验证笔试题,觉得很有意思,和大家分享一下。 面试题目 class A中一个长度为60的随机数组rand int arr[60],如何写约束使得: 1.每个元素的值都在(0,100]之间,且互不相等; 2.最少有三个元素满足勾股数要求,比如数组中包含3,4,5三个点; 请以解约束最快…...

Manus “Less structure,More intelligence ”独行云端处理器

根据市场调研机构Statista数据显示&#xff0c;全球的AR/AR的市场规模预计目前将达到2500亿美元&#xff0c;Manus作为VR手套领域的领军企业&#xff0c;足以颠覆你的认知。本篇文章将带你解读Manus产品&#xff0c;针对用户提出的种种问题&#xff0c;Manus又将如何解决且让使…...

【再读】R1-Onevision通过跨模态形式化为复杂多模态推理任务提供了系统性解决方案

R1-Onevision:跨模态形式化驱动的多模态推理技术突破,R1-Onevision通过跨模态形式化、双阶段训练和教育级基准测试,为多模态推理树立了新标杆。其技术创新不仅提升了模型在复杂任务中的表现,更重要的是为行业提供了一种可解释、可迁移的多模态处理范式。随着形式化方法的不断…...

Mysql-经典实战案例(3): pt-archiver 实现 MySQL 千万级大表分库分表(上)

零基础实战&#xff1a;使用 pt-archiver 实现 MySQL 千万级大表的水平分表&#xff08;Hash分片&#xff09; 本文适合人群&#xff1a;MySQL新手、想低成本实践数据库分表的开发者 环境要求&#xff1a;MySQL 5.7、Linux系统&#xff08;建议CentOS/Ubuntu&#xff09; 你将学…...

使用JSON存储数据的场景

Json 作为一种通用的数据格式&#xff0c;由于其结构灵活、可拓展等特点&#xff0c;在某些场景下我们也会直接将数据以 Json 格式存储到数据库中。 本文将探讨在开发中使用 JSON 存储数据的常见场景&#xff0c;并通过具体的实例帮助大家更好地理解其应用。 1. 半结构化数据…...

文生图网站推荐(2025.3)

以下是2024-2025年期间值得推荐的文生图网站&#xff0c;综合了免费性、中文友好度、操作便捷性及功能特色&#xff0c;涵盖不同用户需求&#xff1a; 一、国内主流平台 通义万相&#xff08;阿里云&#xff09; 特点&#xff1a;每日免费50次生成&#xff0c;模型和风格多样&a…...

网页制作代码html制作一个网页模板

制作一个简单而实用的网页模板&#xff1a;HTML基础入门 在数字时代&#xff0c;网页已成为信息展示和交流的重要平台。HTML&#xff08;HyperText Markup Language&#xff09;作为网页制作的基础语言&#xff0c;为开发者提供了构建网页的基本框架。本文将带你了解如何使用H…...

AI视觉测试工具实战评测:以Applitools为例的技术解析与行业应用

在数字化转型的浪潮中&#xff0c;软件界面&#xff08;UI/UX&#xff09;的复杂性与迭代速度呈指数级增长。传统的人工视觉测试不仅耗时费力&#xff0c;且难以应对多平台、多分辨率下的界面一致性问题。AI视觉测试工具的出现&#xff0c;通过智能图像识别与自动化对比&#x…...

SSM框架——Spring面试题

Spring常见面试题 Spring框架中的单例bean是线程安全的吗 不是线程安全的 Spring框架中有一个Scope注解&#xff0c;默认的值就是singleton&#xff0c;单例的。 因为一般在spring的bean的中都是注入无状态的对象&#xff0c;没有线程安全问题&#xff0c;如果在bean中定义了可…...

华为OD机试 - 计算观看演唱会场次(Java 2023 B卷 200分)

题目描述 为了庆祝中国共产党成立100周年&#xff0c;某公园将举行多场文艺表演。由于演出分布在不同的场地&#xff0c;一个人只能同时观看一场演出&#xff0c;且不能迟到早退。连续观看的演出之间最少需要有15分钟的时间间隔。小明是一个狂热的文艺迷&#xff0c;想观看尽可…...

云原生大佬重生,记忆逐步复苏(十三:selinux模块)

目录 1&#xff1a;什么是selinux 1.1 SELinux 的作用 1.2. SELinux 的工作原理 1.3. SELinux 的运行模式 2:解析selinux文件上下文标签策略 3&#xff1a;selinux的布尔值 4:调查和解决selinux问题 1&#xff1a;什么是selinux SELinux&#xff08;Security-Enhanced L…...

Redis hyperloglog学习

背景知识 【伯努利试验】&#xff1a; 【伯努利试验】是一个概率论中的概念&#xff0c;指在相同的条件下重复进行n次独立的试验&#xff0c;每次试验只有两种可能的结果&#xff0c;且这两种结果发生的概率是固定的 抛硬币作为伯努利试验&#xff1a;在抛硬币时&#xff0c;我…...

MySQL高频八股——事务过程中Undo log、Redo log、Binlog的写入顺序(涉及两阶段提交)

大家好&#xff0c;我是钢板兽&#xff01; 在上一篇文章中&#xff0c;我分别介绍了 Undo Log、Redo Log 和 Binlog 在事务执行过程中的作用与写入机制。然而&#xff0c;实际应用中&#xff0c;这三种日志的写入是有先后顺序的。因此&#xff0c;本篇文章将深入探讨它们的写…...

二阶近似 是什么意思

二阶近似 是什么意思 一、二阶近似的概念与举例 二阶近似是数学分析中通过泰勒展开对函数进行近似的方法,保留到二阶项(即包含一阶导数和二阶导数)。在优化问题(如模型训练)中,常用于近似损失函数,帮助更精准地更新模型参数。 举例: 假设损失函数为 L ( θ ) \mathc…...

Oracle GoldenGate 全面解析

Oracle GoldenGate 全面解析 Oracle GoldenGate 是一种实时数据集成和复制解决方案,广泛应用于数据同步、数据库迁移、高可用性和灾难恢复等场景。以下将详细解答您提出的关于 Oracle GoldenGate 的一系列问题。 1. Oracle GoldenGate 的架构组成及其核心组件的作用 架构组成…...

C++进阶——AVL树的实现

1、AVL的概念 1.1 AVL 树的发明 AVL 树由 G.M. Adelson-Velsky 和 E.M. Landis 在 1962 年的论文《An algorithm for the organization of information》中提出。他们的设计目标是解决二叉搜索树在动态操作&#xff08;插入、删除&#xff09;中可能退化为链表的问题。 1.2 …...

S32K144入门笔记(十三):LPIT的API函数解读

目录 1. SDK中的函数 2. API函数的释义 2.1 获取默认参数 2.2 初始化 2.3 启动与停止 2.4 计数值的设置于读取 2.5 中断API 1. SDK中的函数 在使用SDK的非抽象驱动函数时&#xff0c;函数的定义与声明在文件lpit_driver.c和lpit_driver.h中&#xff0c;一共有19个函数&a…...

打包当前Ubuntu镜像 制作Ubuntu togo系统

我的系统的基本情况说明&#xff1a; 我原来的系统的具体型号如下&#xff1a; uname -rLinux Engine 5.15.0-134-generic #145~20.04.1-Ubuntu SMP Mon Feb 17 13:27:16 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux我原来的硬盘以及分区策略如下&#xff1a; 可以看到我的分区…...

系统架构设计师—案例分析—架构设计

文章目录 经典架构风格对比面向对象架构风格/显示调用风格优点缺点举例 事件驱动的系统/隐式调用风格优点缺点举例 基于规则的系统架构风格优点缺点举例 管道过滤器风格优点缺点举例 仓库风格优点缺点举例 解释器风格优点缺点举例 分层架构风格优点缺点举例 经典架构风格对比 …...

基于javaweb的SpringBoot智能相册管理系统图片相册系统设计与实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…...

Android 14 Telephony 网络选择功能介绍

一、总体介绍 (一)功能 手动搜网的流程:用户通过UI触发,调用TelephonyManager的API,比如startNetworkScan,然后这个请求会传递到RIL层,通过AT命令与基带通信,进行网络扫描。结果返回后,经过TelephonyRegistry通知应用层。中间可能涉及IPC,比如Binder通信,因为应用和…...

Leetcode 刷题笔记1 单调栈part01

leetcode 739 每日温度 对于单调栈问题&#xff0c;我觉得是在循环外部增加一些辅助项减少时间复杂度&#xff0c;但增加内存空间的利用 class Solution:def dailyTemperatures(self, temperatures: List[int]) -> List[int]:ans [0] * len(temperatures)stack []for i …...

深入解析音频编解码器(Audio CODEC):硬件、接口与驱动开发

音频编解码器&#xff08;Audio CODEC&#xff09;是音频处理系统中的核心组件&#xff0c;负责 模拟信号与数字信号的相互转换&#xff0c;广泛应用于 智能音箱、嵌入式系统、消费电子产品 等设备。本篇文章将从 硬件结构、接口解析、驱动开发 和 软件配置 等方面&#xff0c;…...

深度学习【迭代梯度下降法求解线性回归】

梯度下降法 梯度下降法是一种常用迭代方法&#xff0c;其目的是让输入向量找到一个合适的迭代方向&#xff0c;使得输出值能达到局部最小值。在拟合线性回归方程时&#xff0c;我们把损失函数视为以参数向量为输入的函数&#xff0c;找到其梯度下降的方向并进行迭代&#xff0…...

[Lc14_priority_queue] 最后一块石头重量 | 数据流中的第 K 大元素 | 前K个高频单词 | 数据流的中位数

目录 1.最后一块石头的重量 题解 2.数据流中的第 K 大元素 题解 3.前K个高频单词 题解 代码 ⭕4.数据流的中位数 题解 在C中&#xff0c;使用标准库中的priority_queue&#xff0c;默认情况下它是一个最大堆&#xff08;即大堆排序&#xff09;&#xff0c;这意味着最…...

熔断和降级的区别,具体使用场景有哪些?

熔断与降级的核心区别在于触发条件和应用目标&#xff0c;具体差异及使用场景如下&#xff1a; 一、核心区别 对比维度熔断降级触发原因下游依赖服务故障&#xff08;如超时、异常率过高&#xff09;触发系统整体负载过高或流量洪峰管理目标层级框架级保护&#xff08;无业务优…...

利用hexo+github部署属于自己的个人博客网站(2025年3月所写)

利用hexogithub部署属于自己的个人博客网站 前情提要&#xff1a;如果你出现了莫名其妙的报错&#xff0c;可能与权限有关&#xff0c;可以以管理员的身份运行git bash或者cmd 本篇博客仅限于利用hexo搭建博客&#xff0c;并且部署到github上面&#xff0c;让自己可以有一个访…...