Commons IO 框架详解

Commons IO 是 Apache 提供的 Java IO 工具库,它简化了 文件路径 的操作,提高开发效率,减少 try-catch-finally 代码。


1. 依赖导入

📌 1.1 Maven 依赖

1
2
3
4
5
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.15.0</version>
</dependency>

📌 1.2 手动下载

Apache 官网 下载 JAR 包,添加到 lib 目录。

  1. 在项目中创建一个文件夹:lib
  2. 将commons-io-2.6.jar文件复制到lib文件夹
  3. 在jar文件上点右键,选择“Add as library”,点击OK
  4. 在类中导包使用

2. Commons IO 核心工具类

以下是 Commons IO 提供的 核心工具类 及其作用:

工具类 作用
FileUtils 文件操作(复制、删除、读取、写入等)
IOUtils 流操作(复制、关闭、转换等)
FilenameUtils 文件路径操作(获取扩展名、文件名等)
FileSystemUtils 磁盘空间信息
LineIterator 逐行读取文件

3. FileUtils(文件操作)

方法 作用 示例
copyFile(File src, File dest) 复制文件 FileUtils.copyFile(new File("a.txt"), new File("b.txt"));
copyDirectory(File src, File dest) 复制目录 FileUtils.copyDirectory(new File("D:/source"), new File("D:/dest"));
readFileToString(File file, String encoding) 读取文件内容 String content = FileUtils.readFileToString(new File("test.txt"), "UTF-8");
write(File file, String data, String encoding) 写入文件 FileUtils.write(new File("output.txt"), "Hello", "UTF-8");
forceDelete(File file) 删除文件或目录 FileUtils.forceDelete(new File("unwanted.txt"));
deleteDirectory(File directory) 删除整个目录 FileUtils.deleteDirectory(new File("D:/oldFolder"));

4. IOUtils(流操作)

方法 作用 示例
toString(InputStream in, String encoding) 读取输入流 String content = IOUtils.toString(new FileInputStream("test.txt"), "UTF-8");
copy(InputStream in, OutputStream out) 复制流 IOUtils.copy(new FileInputStream("a.txt"), new FileOutputStream("b.txt"));
closeQuietly(Closeable closeable) 关闭流(不抛异常) IOUtils.closeQuietly(inputStream);

5. FilenameUtils(文件路径操作)

方法 作用 示例
getExtension(String filename) 获取文件扩展名 String ext = FilenameUtils.getExtension("test.txt"); // txt
getBaseName(String filename) 获取文件名(无扩展名) String name = FilenameUtils.getBaseName("test.txt"); // test
getFullPath(String filename) 获取完整路径 String path = FilenameUtils.getFullPath("D:/folder/test.txt"); // D:/folder/

6. FileSystemUtils(磁盘空间信息)

方法 作用 示例
freeSpaceKb(String path) 获取磁盘剩余空间(KB) long space = FileSystemUtils.freeSpaceKb("C:");

7. LineIterator(逐行读取文件)

方法 作用 示例
FileUtils.lineIterator(File file, String encoding) 逐行读取大文件 见下方示例

📌 逐行读取示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.LineIterator;
import java.io.File;
import java.io.IOException;

public class LineIteratorExample {
public static void main(String[] args) throws IOException {
File file = new File("largeFile.txt");
LineIterator it = FileUtils.lineIterator(file, "UTF-8");

try {
while (it.hasNext()) {
System.out.println(it.nextLine());
}
} finally {
it.close(); // 关闭迭代器,释放资源
}
}
}

🔹 适用场景

  • 适合读取大文件,防止 OutOfMemoryError
  • 替代 BufferedReader,代码更简洁。

8. 总结

工具类 功能
FileUtils 文件操作(复制、删除、读取、写入)
IOUtils 流操作(复制、关闭、转换)
FilenameUtils 路径解析(获取文件名、扩展名)
FileSystemUtils 磁盘空间查询
LineIterator 逐行读取大文件

📌 Commons IO 极大简化了 Java IO 操作,是 Java 开发的必备工具! 🚀