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

FileUtil 文件管理篇:mkdir、copyFile、rename、unlink 一次搞定

文章目录前言所有案例方法总览创建目录删除目录复制文件copyFile vs copyFileSync重命名rename 即是移动moveFile跨路径移动删除文件unlink vs unlinkSync文件属性查询stat / access / isFile / isDirectory目录大小统计写在最后前言近期发现一款很有意思的HarmonyOS 三方库, 地址 pura/harmony-utils(V1.4.0) , 作者是桃花镇童长老, 我这里也是直接通过该作者公布的源码进行案例编写进行,写了到目前写了一部分demo ,感觉确实很有帮助,这里呢也是开始写一个系列的演示demo 供大家参考。如有帮助可以在OpenHarmony中进行下载安装进行使用哦案例demo导航展示↓↓↓↓↓↓接下来言归正传 ↓↓↓↓读写搞定了文件管理的另一半是目录和文件的增删改。这篇把FileUtilDemoPage里的目录创建、文件复制、重命名、移动和删除操作全部过一遍。所有案例方法总览创建目录HarmonyOS 里创建目录有三个方法各有适用场景createDir推荐的异步创建方式constdirFileUtil.getFilesDirPath(demo_async_dir);awaitFileUtil.createDir(dir);this.addLog(createDir 成功: dir);createDir是封装版内部做了路径处理如果目录已存在不会报错这个特性很实用你不需要先access检查再创建。createDirSync同步版本constdirFileUtil.getFilesDirPath(demo_sync_dir);FileUtil.createDirSync(dir);this.addLog(createDirSync 成功: dir);适合目录很快能创建完、或者确认在非 UI 线程执行的场景。mkdir(path, recursiontrue)递归创建多级目录constdirFileUtil.getFilesDirPath(a/b/c);awaitFileUtil.mkdir(dir,true);this.addLog(mkdir(recursion) 成功: dir);第二个参数true表示递归创建。a/b/c哪怕a、a/b都不存在也会一次性全部创建出来。如果传false或不传父目录不存在时会报错。删除目录constdirFileUtil.getFilesDirPath(demo_async_dir);awaitFileUtil.rmdir(dir);this.addLog(rmdir 成功);rmdir会递归删除目录及其所有内容用的时候要小心没有回收站删了就没了。复制文件copyFile vs copyFileSync// 异步复制constsrcFileUtil.getFilesDirPath(undefined,demo_file.txt);constdstFileUtil.getFilesDirPath(undefined,demo_copy.txt);awaitFileUtil.copyFile(src,dst);this.addLog(copyFile 成功);// 同步复制constsrcFileUtil.getFilesDirPath(undefined,demo_file.txt);constdstFileUtil.getFilesDirPath(undefined,demo_copy_sync.txt);FileUtil.copyFileSync(src,dst);this.addLog(copyFileSync 成功);两个参数源文件路径和目标文件路径。注意如果目标文件已存在会直接覆盖目标文件的父目录必须存在否则报错源文件必须存在否则报错所以复制前最好先确认源文件存在用accessSync目标目录也存在用mkdir确保。重命名rename 即是移动rename的名字叫重命名但实际上它也能做移动到同目录下的新名字// 重命名异步constsrcFileUtil.getFilesDirPath(undefined,demo_copy.txt);constdstFileUtil.getFilesDirPath(undefined,demo_renamed.txt);awaitFileUtil.rename(src,dst);this.addLog(rename 成功);// 重命名同步constsrcFileUtil.getFilesDirPath(undefined,demo_copy_sync.txt);constdstFileUtil.getFilesDirPath(undefined,demo_renamed_sync.txt);FileUtil.renameSync(src,dst);this.addLog(renameSync 成功);本质上renamemoverename只要在同一个文件系统内可以跨目录移动// 这样也是合法的相当于移动到 sub 目录并重命名constsrcFileUtil.getFilesDirPath(undefined,a.txt);constdstFileUtil.getFilesDirPath(sub,b.txt);awaitFileUtil.rename(src,dst);moveFile跨路径移动如果明确是移动操作用moveFile语义更清晰constsrcFileUtil.getFilesDirPath(undefined,demo_renamed.txt);constdstFileUtil.getFilesDirPath(moved_dir,moved.txt);awaitFileUtil.moveFile(src,dst,0);this.addLog(moveFile 成功);第三个参数0是冲突模式0表示如果目标已存在就覆盖。删除文件unlink vs unlinkSync// 异步删除constpFileUtil.getFilesDirPath(undefined,demo_file.txt);awaitFileUtil.unlink(p);this.addLog(unlink 删除成功);// 同步删除constpFileUtil.getFilesDirPath(undefined,demo_renamed_sync.txt);FileUtil.unlinkSync(p);this.addLog(unlinkSync 删除成功);unlink只能删单个文件不能删目录用rmdir删目录。文件属性查询stat / access / isFile / isDirectorystat获取文件详细信息constpFileUtil.getFilesDirPath(undefined,demo_file.txt);constsawaitFileUtil.stat(p);this.addLog(stat: size${s.size}isFile${s.isFile()});stat返回fs.Stat对象常用属性size文件大小字节isFile()是否是普通文件isDirectory()是否是目录access检查文件是否存在constpFileUtil.getFilesDirPath(undefined,demo_file.txt);constexistsawaitFileUtil.access(p);this.addLog(access: exists);access返回booleantrue表示文件存在。isFile / isDirectory快速判断类型constpFileUtil.getFilesDirPath(undefined,demo_file.txt);constsFileUtil.statSync(p);this.addLog(isFile:${FileUtil.isFile(p)}| isDirectory:${FileUtil.isDirectory(FileUtil.getFilesDirPath())});目录大小统计constdirFileUtil.getFilesDirPath();constsizeFileUtil.getFileDirSize(dir);this.addLog(目录大小: FileUtil.getFormatFileSize(size));getFileDirSize统计目录下所有文件的总大小递归getFormatFileSize把字节数格式化成人类可读的单位KB、MB、GB// 各单位格式化示例[0,512,1536,1024*1024,1024*1024*1024].forEach(b{this.addLog(${b}B →${FileUtil.getFormatFileSize(b)});});// 0 B → 0 B// 512 B → 512 B// 1536 B → 1.5 KB// 1048576 B → 1 MB// 1073741824 B → 1 GB写在最后文件管理的几个核心方法创建目录createDir已存在不报错、mkdir(path, true)递归创建复制copyFile/copyFileSync重命名/移动rename/renameSync删除文件unlink删目录用rmdir检查存在access/accessSync返回 boolean操作文件之前养成先检查路径、包try-catch的习惯能省掉很多不必要的崩溃排查时间。
http://www.zskr.cn/news/1406297.html

相关文章:

  • 从命令行到集群:解锁Kettle三大核心工具(pan/kitchen/carte)的自动化与调度实战
  • 3分钟学会自动化strm文件生成:告别手动创建,拥抱智能流媒体管理
  • 构建开源LLM记忆层:为AI应用打造持久化外部大脑
  • 告别玄学调试!用这5个关键测试点,快速定位开关电源故障(附波形分析)
  • AWS实战避坑指南:拆解云原生、高可用与成本治理的三大迷思
  • NISQ时代QAOA实战:噪声环境下的误差缓解策略与分阶段部署指南
  • 深度神经网络模型部署实战:多维度性能基准分析与选型指南
  • ChatGPT销售话术失效的3个隐蔽信号(附2023真实对话审计报告+话术热力图诊断工具)
  • ARMv8 PMU性能监控:PMEVTYPER寄存器详解与实践
  • 从‘拨款’到‘董事会’:拆解NECCS真题里的职场英语,为你的简历加分
  • NetBox Docker企业级部署与架构解析:构建生产就绪的IPAM/DCIM系统
  • Git 创建仓库
  • 为什么你的ChatGPT面试题总被候选人反向“考倒”?——4大认知偏差陷阱与动态校准公式
  • 从CentOS 6.8到8.3:升级系统后,我的Sentaurus TCAD安装与兼容性历险记
  • 信创项目招投标全攻略:Agent产品准入资质要求与国产化落地路径解析
  • 同样是“一句话指令”,不同产品的实现差距有多大?深度解析实在Agent商业案例库背后的技术鸿沟
  • 探索OpCore Simplify:自动化OpenCore EFI配置的艺术
  • Python 3.10.0 环境搭建实战:从零配置到首个程序运行
  • 如何用5分钟搭建你的微信AI智能助手:多模型自动回复终极指南
  • ARM指令集架构与内存同步指令深度解析
  • Atlas 800I A2 vs Atlas 300I Duo:盘古Pro MoE硬件选型终极指南
  • 从Voxblox到Fast Planner:聊聊几种ESDF地图构建方案的性能与选择
  • 树莓派SD卡空间总告急?试试这个‘瘦身’备份法:只备份有用数据,镜像体积缩小一半
  • 掌握 Agent 开发,抢占 2026 AI 首席岗位!必备技术路线图(附就业指南)
  • 基于Rust与AI的命令行纠错工具:从原理到工程实践
  • 3步解锁音乐自由:这款开源工具让你告别格式束缚
  • HBM4如何移动内存墙:从带宽瓶颈到系统集成挑战
  • 紧急更新!OpenAI API v4.5对诗歌生成逻辑的重大调整:3类经典prompt突然失效,立即启用这4个兼容性修复方案
  • ChatGPT目标设定实战指南:5类高频失效场景+对应Prompt模板(附2024最新测试数据)
  • ZE41镁合金薄壁铸件集成计算与制备工艺【附代码】