鸿蒙三方库 | harmony-utils之FileUtil文件流操作详解

鸿蒙三方库 | harmony-utils之FileUtil文件流操作详解
前言对于大文件读写流式操作比一次性读写更高效避免内存溢出。pura/harmony-utils的FileUtil封装了文件流操作方法支持按需读写文件内容。本文将从API说明、代码实战、进阶用法、常见问题等多个维度进行全面讲解帮助开发者快速掌握并应用到实际项目中。一、FileUtil流操作核心APIFileUtil提供了以下文件流操作方法方法说明返回类型使用场景createReadStream(path)创建读取流Stream大文件读取createWriteStream(path)创建写入流Stream大文件写入readBytes(stream, length)读取指定字节ArrayBuffer分批读取writeBytes(stream, buffer)写入字节void分批写入1.1 核心特性简洁易用封装复杂API为一行调用降低使用门槛类型安全完整的TypeScript类型定义编译期即可发现错误异常处理内置异常捕获机制避免运行时崩溃内存友好流式操作避免一次性加载大文件到内存1.2 流式操作与一次性操作对比特性流式操作一次性操作内存占用低高适用文件大小大文件小文件操作复杂度较高较低代码量较多较少二、完整使用步骤2.1 安装依赖ohpminstallpura/harmony-utils2.2 流式读取import{FileUtil}frompura/harmony-utils;Button(流式读取文件).width(100%).onClick((){try{letpathFileUtil.getFilesDir()/large.dat;letstreamFileUtil.createReadStream(path);this.result读取流创建成功 ✅\n可按需读取文件内容;}catch(e){this.result异常: e;}})2.3 流式写入Button(流式写入文件).width(100%).onClick((){try{letpathFileUtil.getFilesDir()/output.dat;letstreamFileUtil.createWriteStream(path);this.result写入流创建成功 ✅\n可分批写入数据;}catch(e){this.result异常: e;}})三、完整页面示例import{FileUtil}frompura/harmony-utils;EntryComponentstruct FileStreamDemo{Stateresult:string;build(){Column({space:12}){Button(流式操作).width(100%).onClick((){try{this.result流式操作适用于大文件\n避免一次性加载到内存;}catch(e){this.result异常: e;}});Text(this.result).fontSize(14).fontColor(#333333)}.padding(16)}}四、进阶用法4.1 分批读取大文件import{FileUtil}frompura/harmony-utils;asyncfunctionreadLargeFile(path:string,chunkSize:number):void{letstreamFileUtil.createReadStream(path);letoffset0;while(true){letchunkFileUtil.readBytes(stream,chunkSize);if(chunk.byteLength0)break;processChunk(chunk);offsetchunk.byteLength;}}4.2 流式文件拷贝functionstreamCopy(src:string,dest:string,chunkSize:number4096):void{letreadStreamFileUtil.createReadStream(src);letwriteStreamFileUtil.createWriteStream(dest);while(true){letchunkFileUtil.readBytes(readStream,chunkSize);if(chunk.byteLength0)break;FileUtil.writeBytes(writeStream,chunk);}}五、注意事项流关闭使用完毕后务必关闭流释放系统资源缓冲区大小合理设置每次读写的缓冲区大小异常处理流操作中需处理可能的IO异常初始化依赖使用前需确保AppUtil.init()已调用并发安全同一文件不要同时打开多个流六、常见问题Q1: 流式操作比一次性操作慢流式操作有额外开销小文件建议使用一次性操作大文件才使用流式操作。Q2: 如何确定合适的缓冲区大小一般建议4KB-64KB具体取决于文件大小和内存情况。Q3: 流操作中断后如何恢复需要记录已处理的偏移量重新打开流后从断点继续。Q4: 流式操作支持网络文件吗FileUtil的流操作仅支持本地文件网络文件需先下载到本地。总结FileUtil的文件流操作方法为大文件处理提供了内存友好的解决方案。本文详细介绍了核心API、使用步骤、完整示例、进阶用法以及常见问题的解决方案。开发者应根据文件大小选择合适的读写方式。本文基于pura/harmony-utils工具库更多功能请参考官方文档与后续系列文章。