JavaSE加强:Commons-io框架

一、Commons-io 介绍

Apache Commons IO 是 Apache 提供的第三方 IO 工具包,封装大量 IO、文件操作工具方法,简化原生 Java IO/File 繁琐代码,不用手写递归遍历、文件拷贝、关闭流等重复代码。

原生 File 和 IO 流代码量大、容易忘关闭流、递归写起来麻烦;Commons-io 帮我们封装好了。

1. 依赖导入(Maven)

XML 复制代码
<!-- commons-io 依赖 -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.11.0</version>
</dependency>

如果是普通 Java 项目:下载commons-io-2.11.0.jar,添加到项目库(创建lib包)。

二、核心三大类

  1. FileUtils:文件 / 文件夹操作(最常用)
  2. IOUtils:流操作工具类
  3. FilenameUtils :文件名、路径字符串处理,不操作磁盘真实文件,只处理字符串

三、FileUtils 常用 API(重点)

1. 文件拷贝

java 复制代码
import org.apache.commons.io.FileUtils;
import java.io.File;

public class Test {
    public static void main(String[] args) throws Exception {
        File src = new File("D:/test/1.jpg");
        File dest = new File("D:/test/copy.jpg");
        // 复制单个文件
        FileUtils.copyFile(src, dest);
    }
}
  • copyFile(srcFile, destFile):复制文件,目标文件不存在自动创建;存在直接覆盖
  • copyFileToDirectory(src, destDir):把文件复制到目标文件夹

2. 文件夹拷贝(自带递归!不用自己写递归)

java 复制代码
File srcDir = new File("D:/test");
File destDir = new File("D:/test2");
// 复制整个文件夹(包含里面所有子文件、子文件夹)
FileUtils.copyDirectory(srcDir, destDir);

✅ 原生 Java 要手写递归遍历 File;这个一行搞定多级目录复制。

3. 删除文件夹(递归删除)

java 复制代码
File dir = new File("D:/test2");
FileUtils.deleteDirectory(dir);

⚠️ 注意:deleteDirectory 可以删除非空文件夹 ,原生file.delete()只能删空文件夹!面试高频对比点。

4. 读取文件内容

java 复制代码
File file = new File("D:/a.txt");
// 一次性读取全部文本,返回字符串
String content = FileUtils.readFileToString(file, "UTF-8");
System.out.println(content);

// 读取文件按行,返回List<String>
List<String> lines = FileUtils.readLines(file, "UTF-8");

5. 写入文件

java 复制代码
File file = new File("D:/a.txt");
// 写入内容,覆盖原有内容
FileUtils.writeStringToFile(file, "hello commons io", "UTF-8");
// 追加写入,第三个参数true代表追加
FileUtils.writeStringToFile(file, "\n追加内容", "UTF-8", true);

6. 其他常用

  • FileUtils.sizeOf(file):获取文件 / 文件夹总大小(字节)
  • FileUtils.listFiles():递归查找指定后缀文件(替代手写递归搜索文件)
java 复制代码
File dir = new File("D:/test");
// 参数:目录,文件后缀数组,是否递归子目录
Collection<File> files = FileUtils.listFiles(dir, new String[]{"txt","jpg"}, true);
for(File f : files){
    System.out.println(f);
}

四、IOUtils 流工具类

专门简化 InputStream、OutputStream、Reader、Writer 操作

  1. 流拷贝
java 复制代码
// 把输入流数据复制到输出流
IOUtils.copy(inputStream, outputStream);
  1. 读取流全部内容
java 复制代码
String str = IOUtils.toString(inputStream, StandardCharsets.UTF_8);

✅ IOUtils 还封装了流关闭方法,旧版本:IOUtils.closeQuietly(),静默关闭流,不用 try-catch。 ⚠️ 新版本推荐 try-with-resources,closeQuietly 已经废弃。

五、FilenameUtils:路径字符串处理

不会操作磁盘文件!只处理路径字符串

java 复制代码
String path = "D:/demo/1.txt";
// 获取文件名:1.txt
String name = FilenameUtils.getName(path);
// 获取后缀:txt
String ext = FilenameUtils.getExtension(path);
// 获取不带后缀名称:1
String base = FilenameUtils.getBaseName(path);

六、面试考点总结

  1. Commons-io 是第三方工具包,不是 JDK 原生,需要导入 jar/maven 依赖。
  2. FileUtils.copyDirectory():递归复制整个目录;FileUtils.deleteDirectory()递归删除非空文件夹。原生 File.delete () 只能删除空文件夹。
  3. FileUtils.listFiles():可以递归检索指定后缀文件,替代手写递归。
  4. FileUtils:操作真实磁盘文件;FilenameUtils:只处理路径字符串,不访问磁盘。
  5. IOUtils:简化 IO 流读写。

七、易错点

⚠️ 所有 FileUtils 读写方法都会抛出异常,需要 throws 或者 try-catch 捕获 IOException ⚠️ 删除操作deleteDirectory很危险,测试时不要写系统目录! ⚠️ 不要混淆:FileUtils.forceDelete() 和 deleteDirectory(),都可以删非空目录。

八、对比原生 IO

原生 IO:手写 while 循环读写、手动关闭流、文件夹拷贝需要自己写递归 File 遍历,代码冗长。 Commons-io:一行 API 完成文件拷贝、递归查找、文件夹删除,开发效率高。

相关推荐
懂点Tech12 分钟前
ctfshow misc28:GIF 高度修改解题与脚本实现
开发语言·windows·python
微尘hjx25 分钟前
【ByteTrack 04】多轨迹算法ByteTrack改进点
算法·yolo·目标检测·目标跟踪·bytetrack·ultralytics·车跟踪
云和数据.ChenGuang30 分钟前
Python 重写(Override)深度解析:从 MRO 到 super() 的完整机制
java·开发语言·人工智能·python·langchain·1024程序员节
摇滚侠39 分钟前
《On Java 中文版 基础卷》阅读笔记 实现隐藏 12
java·数据库·笔记
美狐美颜SDK开放平台1 小时前
视频美颜SDK试用DEMO阶段应该测试什么?直播APP接入实操指南
开发语言·人工智能·深度学习·音视频·美颜sdk·直播美颜sdk·第三方美颜sdk
dtq04241 小时前
C++小案例 - 日志实战
开发语言·c++
星夜离尘562 小时前
MATLAB ADC 码流触顶诊断:命中数、缺口分段与削顶不可辨识性
开发语言·matlab
码匠许师傅2 小时前
【C++三方组件】Qt 概览:桌面 C++ 的事实标准与许可证三轨
开发语言·c++·qt
码匠许师傅3 小时前
【C++三方组件】POCO:跨平台系统编程全家桶
开发语言·c++
silvamux_3 小时前
10款模型写种草笔记:可发布性、返工来源与成本数据缺口复盘
java·数据库·笔记