前言
在 Java 中处理文件操作(如复制、删除、读取、写入等)时,如果仅使用 JDK 自带的 API,往往代码繁琐且不够直观。Apache Commons IO 提供的 FileUtils
工具类封装了常用的文件操作,大大提升了开发效率,是 Java 项目中广泛应用的文件处理工具。
一、引入依赖
Maven:
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
二、FileUtils 常用方法
1. 复制文件/目录
FileUtils.copyFile(srcFile, destFile);
FileUtils.copyDirectory(srcDir, destDir);
2. 删除文件/目录
FileUtils.deleteQuietly(fileOrDir); // 无异常抛出
3. 读取文件内容为字符串/列表
String content = FileUtils.readFileToString(file, StandardCharsets.UTF_8);
List<String> lines = FileUtils.readLines(file, StandardCharsets.UTF_8);
4. 写入字符串到文件
FileUtils.writeStringToFile(file, "hello", StandardCharsets.UTF_8);
5. 文件大小/目录大小
long size = FileUtils.sizeOf(file);
long dirSize = FileUtils.sizeOfDirectory(directory);
6. 文件比较
boolean isSame = FileUtils.contentEquals(file1, file2);
7. 清空目录
FileUtils.cleanDirectory(directory);
8. 获取临时目录、用户目录
File tmp = FileUtils.getTempDirectory();
File home = FileUtils.getUserDirectory();
三、常见应用场景
-
备份文件:批量复制配置文件。
-
日志清理:自动删除过期日志目录。
-
上传下载处理:读取上传内容、写入导出文件。
-
数据同步工具开发:对比两个文件是否一致,拷贝差异内容。
-
构建工具:清空或初始化工作目录。
四、与 JDK 原生 API 对比
操作 | JDK 原生 | FileUtils |
---|---|---|
复制文件 | FileInputStream/OutputStream + 手动缓冲 | copyFile() 一行搞定 |
读取文件为字符串 | BufferedReader + 循环 | readFileToString() 一行完成 |
删除目录 | 递归删除文件夹 | deleteQuietly() 简洁且不抛异常 |
五、注意事项
-
deleteQuietly()
会吞掉异常,适合非关键流程。 -
cleanDirectory()
不会删除根目录,只清空内部内容。 -
大文件操作仍需关注内存消耗,避免
readFileToString()
直接读入内存导致 OOM。
六、总结
FileUtils
是文件处理的利器,封装了大量通用操作,适用于日常开发中大多数文件 I/O 场景。它极大简化了 Java 文件操作的繁琐步骤,提高了代码的可读性和可维护性。
熟练掌握 FileUtils 能帮助我们更高效地编写与文件相关的逻辑代码,特别是在工具类、批处理、后台任务调度、资源管理等模块中,非常值得推荐使用。