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 完成文件拷贝、递归查找、文件夹删除,开发效率高。

相关推荐
Do_It_Today2 小时前
php url路由入门实例
开发语言·php
程序猿_极客2 小时前
【免费】2026分享一套优质的基于Java的电子产品抢购管理系统的设计与实现(智能推荐算法+可视化图表),源码+文档+视频详解(讲解)
java·spring boot·后端·协同过滤·电子产品抢购系统
小羊没烦恼!2 小时前
关于大型asp.net应用系统的架构-架构的选择
java·服务器·开发语言·前端·c#
天空鸟_时光不老2 小时前
09-RAG问答系统落地:从默认分割器的坑到Milvus召回调优
java·人工智能·spring boot·spring·spring cloud·maven·mybatis
小羊没烦恼!2 小时前
Windows Azure Platform体验(1):Windows Azure
java·大数据·后端·python·flask·word·.net
夏幻灵2 小时前
前端八股:JavaScript 深拷贝详解:实现方式、递归原理与循环引用
开发语言·前端·javascript
suaizai_2 小时前
ComputerUse:让AI真正操控桌面系统
java·前端·javascript
梦帮科技2 小时前
【3.0修订版】音乐权利 NFT:MusicRightsNFT 的确权思想与授权关联
网络协议·算法·web3·区块链·密码学·智能合约·零知识证明
傲世仙尊2 小时前
C++起步-命名空间解决命名冲突与cin-cout缺省参数
开发语言·c++