鸿蒙编译框架@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 构建流程 | 通用文件操作 |
七、注意事项
- 路径基准:相对路径基于 模块根目录(含
hvigorfile.ts的目录) - 性能优化:批量操作建议使用
listFiles+ 循环处理 - 权限问题:确保对目标目录有写权限
通过 FileUtil 可以更便捷地实现构建流程中的文件操作,建议结合 Hvigor 官方文档 深入使用。
相关文章:
鸿蒙编译框架@ohos/hvigor FileUtil用法
ohos/hvigor FileUtil用法 在鸿蒙(HarmonyOS)开发中,ohos/hvigor 的 FileUtil 是用于文件操作的实用工具类,提供了跨平台的文件读写、路径处理等常用方法。以下是其核心用法和示例: 一、核心方法说明 方法名功能描…...
Hoppscotch 开源API 开发工具
Hoppscotch 是一个开源的 API 开发工具,旨在为开发者提供一个轻量级、快速且功能丰富的 API 开发和调试平台。以下是对其主要特性和功能的详细介绍: 1. 轻量级与高效 Hoppscotch 采用简约的 UI 设计,注重易用性和高效性。它支持实时发送请求…...
Infura 简介
文章目录 Infura 简介Infura 的主要功能Infura 的替代方案(类似服务)AlchemyQuickNodeAnkrMoralisPocket Network 什么时候选择 Infura? Infura 简介 Infura 是一个 区块链基础设施即服务(BaaS, Blockchain as a Service…...
【芯片验证】面试题·对深度为60的数组进行复杂约束的技巧
朋友发给我的芯片验证笔试题,觉得很有意思,和大家分享一下。 面试题目 class A中一个长度为60的随机数组rand int arr[60],如何写约束使得: 1.每个元素的值都在(0,100]之间,且互不相等; 2.最少有三个元素满足勾股数要求,比如数组中包含3,4,5三个点; 请以解约束最快…...
Manus “Less structure,More intelligence ”独行云端处理器
根据市场调研机构Statista数据显示,全球的AR/AR的市场规模预计目前将达到2500亿美元,Manus作为VR手套领域的领军企业,足以颠覆你的认知。本篇文章将带你解读Manus产品,针对用户提出的种种问题,Manus又将如何解决且让使…...
【再读】R1-Onevision通过跨模态形式化为复杂多模态推理任务提供了系统性解决方案
R1-Onevision:跨模态形式化驱动的多模态推理技术突破,R1-Onevision通过跨模态形式化、双阶段训练和教育级基准测试,为多模态推理树立了新标杆。其技术创新不仅提升了模型在复杂任务中的表现,更重要的是为行业提供了一种可解释、可迁移的多模态处理范式。随着形式化方法的不断…...
Mysql-经典实战案例(3): pt-archiver 实现 MySQL 千万级大表分库分表(上)
零基础实战:使用 pt-archiver 实现 MySQL 千万级大表的水平分表(Hash分片) 本文适合人群:MySQL新手、想低成本实践数据库分表的开发者 环境要求:MySQL 5.7、Linux系统(建议CentOS/Ubuntu) 你将学…...
使用JSON存储数据的场景
Json 作为一种通用的数据格式,由于其结构灵活、可拓展等特点,在某些场景下我们也会直接将数据以 Json 格式存储到数据库中。 本文将探讨在开发中使用 JSON 存储数据的常见场景,并通过具体的实例帮助大家更好地理解其应用。 1. 半结构化数据…...
文生图网站推荐(2025.3)
以下是2024-2025年期间值得推荐的文生图网站,综合了免费性、中文友好度、操作便捷性及功能特色,涵盖不同用户需求: 一、国内主流平台 通义万相(阿里云) 特点:每日免费50次生成,模型和风格多样&a…...
网页制作代码html制作一个网页模板
制作一个简单而实用的网页模板:HTML基础入门 在数字时代,网页已成为信息展示和交流的重要平台。HTML(HyperText Markup Language)作为网页制作的基础语言,为开发者提供了构建网页的基本框架。本文将带你了解如何使用H…...
AI视觉测试工具实战评测:以Applitools为例的技术解析与行业应用
在数字化转型的浪潮中,软件界面(UI/UX)的复杂性与迭代速度呈指数级增长。传统的人工视觉测试不仅耗时费力,且难以应对多平台、多分辨率下的界面一致性问题。AI视觉测试工具的出现,通过智能图像识别与自动化对比&#x…...
SSM框架——Spring面试题
Spring常见面试题 Spring框架中的单例bean是线程安全的吗 不是线程安全的 Spring框架中有一个Scope注解,默认的值就是singleton,单例的。 因为一般在spring的bean的中都是注入无状态的对象,没有线程安全问题,如果在bean中定义了可…...
华为OD机试 - 计算观看演唱会场次(Java 2023 B卷 200分)
题目描述 为了庆祝中国共产党成立100周年,某公园将举行多场文艺表演。由于演出分布在不同的场地,一个人只能同时观看一场演出,且不能迟到早退。连续观看的演出之间最少需要有15分钟的时间间隔。小明是一个狂热的文艺迷,想观看尽可…...
云原生大佬重生,记忆逐步复苏(十三:selinux模块)
目录 1:什么是selinux 1.1 SELinux 的作用 1.2. SELinux 的工作原理 1.3. SELinux 的运行模式 2:解析selinux文件上下文标签策略 3:selinux的布尔值 4:调查和解决selinux问题 1:什么是selinux SELinux(Security-Enhanced L…...
Redis hyperloglog学习
背景知识 【伯努利试验】: 【伯努利试验】是一个概率论中的概念,指在相同的条件下重复进行n次独立的试验,每次试验只有两种可能的结果,且这两种结果发生的概率是固定的 抛硬币作为伯努利试验:在抛硬币时,我…...
MySQL高频八股——事务过程中Undo log、Redo log、Binlog的写入顺序(涉及两阶段提交)
大家好,我是钢板兽! 在上一篇文章中,我分别介绍了 Undo Log、Redo Log 和 Binlog 在事务执行过程中的作用与写入机制。然而,实际应用中,这三种日志的写入是有先后顺序的。因此,本篇文章将深入探讨它们的写…...
二阶近似 是什么意思
二阶近似 是什么意思 一、二阶近似的概念与举例 二阶近似是数学分析中通过泰勒展开对函数进行近似的方法,保留到二阶项(即包含一阶导数和二阶导数)。在优化问题(如模型训练)中,常用于近似损失函数,帮助更精准地更新模型参数。 举例: 假设损失函数为 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》中提出。他们的设计目标是解决二叉搜索树在动态操作(插入、删除)中可能退化为链表的问题。 1.2 …...
S32K144入门笔记(十三):LPIT的API函数解读
目录 1. SDK中的函数 2. API函数的释义 2.1 获取默认参数 2.2 初始化 2.3 启动与停止 2.4 计数值的设置于读取 2.5 中断API 1. SDK中的函数 在使用SDK的非抽象驱动函数时,函数的定义与声明在文件lpit_driver.c和lpit_driver.h中,一共有19个函数&a…...
打包当前Ubuntu镜像 制作Ubuntu togo系统
我的系统的基本情况说明: 我原来的系统的具体型号如下: 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我原来的硬盘以及分区策略如下: 可以看到我的分区…...
系统架构设计师—案例分析—架构设计
文章目录 经典架构风格对比面向对象架构风格/显示调用风格优点缺点举例 事件驱动的系统/隐式调用风格优点缺点举例 基于规则的系统架构风格优点缺点举例 管道过滤器风格优点缺点举例 仓库风格优点缺点举例 解释器风格优点缺点举例 分层架构风格优点缺点举例 经典架构风格对比 …...
基于javaweb的SpringBoot智能相册管理系统图片相册系统设计与实现(源码+文档+部署讲解)
技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…...
Android 14 Telephony 网络选择功能介绍
一、总体介绍 (一)功能 手动搜网的流程:用户通过UI触发,调用TelephonyManager的API,比如startNetworkScan,然后这个请求会传递到RIL层,通过AT命令与基带通信,进行网络扫描。结果返回后,经过TelephonyRegistry通知应用层。中间可能涉及IPC,比如Binder通信,因为应用和…...
Leetcode 刷题笔记1 单调栈part01
leetcode 739 每日温度 对于单调栈问题,我觉得是在循环外部增加一些辅助项减少时间复杂度,但增加内存空间的利用 class Solution:def dailyTemperatures(self, temperatures: List[int]) -> List[int]:ans [0] * len(temperatures)stack []for i …...
深入解析音频编解码器(Audio CODEC):硬件、接口与驱动开发
音频编解码器(Audio CODEC)是音频处理系统中的核心组件,负责 模拟信号与数字信号的相互转换,广泛应用于 智能音箱、嵌入式系统、消费电子产品 等设备。本篇文章将从 硬件结构、接口解析、驱动开发 和 软件配置 等方面,…...
深度学习【迭代梯度下降法求解线性回归】
梯度下降法 梯度下降法是一种常用迭代方法,其目的是让输入向量找到一个合适的迭代方向,使得输出值能达到局部最小值。在拟合线性回归方程时,我们把损失函数视为以参数向量为输入的函数,找到其梯度下降的方向并进行迭代࿰…...
[Lc14_priority_queue] 最后一块石头重量 | 数据流中的第 K 大元素 | 前K个高频单词 | 数据流的中位数
目录 1.最后一块石头的重量 题解 2.数据流中的第 K 大元素 题解 3.前K个高频单词 题解 代码 ⭕4.数据流的中位数 题解 在C中,使用标准库中的priority_queue,默认情况下它是一个最大堆(即大堆排序),这意味着最…...
熔断和降级的区别,具体使用场景有哪些?
熔断与降级的核心区别在于触发条件和应用目标,具体差异及使用场景如下: 一、核心区别 对比维度熔断降级触发原因下游依赖服务故障(如超时、异常率过高)触发系统整体负载过高或流量洪峰管理目标层级框架级保护(无业务优…...
利用hexo+github部署属于自己的个人博客网站(2025年3月所写)
利用hexogithub部署属于自己的个人博客网站 前情提要:如果你出现了莫名其妙的报错,可能与权限有关,可以以管理员的身份运行git bash或者cmd 本篇博客仅限于利用hexo搭建博客,并且部署到github上面,让自己可以有一个访…...
