跳到主要内容

FileUtil 文件工具类

📦 包路径: top.csaf.io.FileUtil

🔗 所属模块: zutil-io

🧬 继承关系: 继承自 org.apache.commons.io.FileUtils

FileUtil 是一个强大的文件操作工具类。它继承自 Apache Commons IO 的 FileUtils,保留了其所有强大的文件读写、拷贝、移动等功能,并在此基础上扩展了项目路径获取资源文件加载文件名/扩展名解析以及路径替换等实用功能。

✨ 核心特性

  • 完全兼容: 继承自 commons-io,无缝使用其所有标准文件操作方法(如 writeStringToFile, copyFile 等)。
  • 路径获取: 轻松获取项目根路径、工作目录、ClassPath 根路径,自动处理不同操作系统的路径差异(如 Windows 下去除开头的 /)。
  • 资源加载: 简化 resources 目录下文件的流获取,无需关心路径前缀问题。
  • 正则解析: 利用反向正则高效提取文件名、扩展名、目录路径。
  • 路径模板: 提供支持变量($1, $2)的文件路径替换功能,方便文件重命名或迁移。

🚀 常用方法概览

1. 路径与环境获取 (Path & Env) 🌍

获取当前运行环境的相关路径。

方法名描述示例
getUserDir获取工作目录 (user.dir)Tomcat Bin 目录或项目根目录
getProjectPath获取项目规范路径/path/to/project
getResourceRootPath获取类加载根路径 (target/classes)/path/to/classes/
getClassPath获取指定类的 .class 文件所在路径/path/to/classes/top/csaf/io/

示例代码:

// 获取 resources 根目录 (target/classes)
String rootPath = FileUtil.getResourceRootPath();

// 获取当前类的路径
String classPath = FileUtil.getClassPath(FileUtil.class);

2. 资源加载 (Resources) 📂

简化从 ClassPath (src/main/resources) 读取文件的操作。

// 读取 resources/config/app.yml
InputStream is = FileUtil.getResourceAsStream("config/app.yml");

// 相对于指定类加载资源
InputStream is2 = FileUtil.getResourceAsStream(MyClass.class, "test.txt");

3. 文件名与扩展名解析 (Parse) 🔍

使用正则精确解析文件路径中的各个部分。

方法名描述输入示例输出示例
getFileExtension获取文件后缀名/a/b/test.txttxt
getNameByPath获取文件名 (含后缀)/a/b/test.txttest.txt
getDirPathByPath获取父目录路径/a/b/test.txt/a/b/
getDirPathAndNameByPath同时获取目录和文件名/a/b/test.txt["/a/b/", "test.txt"]
String path = "/data/logs/error.log";

String ext = FileUtil.getFileExtension(path); // -> "log"
String name = FileUtil.getNameByPath(path); // -> "error.log"
String dir = FileUtil.getDirPathByPath(path); // -> "/data/logs/"

4. 路径替换与重命名 (Replace) 🔄

支持使用模板变量生成新路径,常用于文件重命名或格式转换场景。

  • $1: 原文件名 (不含后缀)
  • $2: 原后缀名
String src = "/data/images/photo.png";

// 场景 1: 修改后缀名 (photo.png -> photo.jpg)
// 只有文件名部分,保持原目录不变
String newPath1 = FileUtil.replace(src, "$1.jpg");
// -> "/data/images/photo.jpg"

// 场景 2: 移动目录并重命名 (photo.png -> /backup/photo_bak.png)
String newPath2 = FileUtil.replace(src, "/backup/$1_bak.$2");
// -> "/backup/photo_bak.png"

📚 继承能力 (Commons IO)

由于继承自 org.apache.commons.io.FileUtils,你还可以直接使用以下常用静态方法:

  • readFileToString(File, Charset): 读取文件内容为字符串。
  • writeStringToFile(File, String, Charset): 字符串写入文件。
  • copyFile(File, File): 复制文件。
  • forceDelete(File): 强制删除文件/目录。
  • sizeOf(File): 获取文件/目录大小。

更多父类功能请参考 Commons IO 官方文档