Apache Commons IO 提供了豐富的工具類,極大地簡化了 Java 中繁瑣的 I/O 操作。本文整理了文件複製、寫入、刪除、讀取等常用場景的代碼範例,助你快速上手。
package demo;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import java.io.*;
public class FileCopyExample {
public static void main(String[] args) {
try {
// 1. 文件複製到文件
File src = new File("test.dat");
File dest = new File("test.dat.bak");
FileUtils.copyFile(src, dest);
// 2. 文件複製到目錄
File dir = new File("./temp");
FileUtils.copyFileToDirectory(src, dir);
// 3. 字符串寫入文件(指定編碼)
String content = "Blah blah blah";
FileUtils.writeStringToFile(new File("test.tmp"), content, "ISO-8859-1");
// 4. 輸入流複製到 Writer
Writer writer = new FileWriter("test.dat");
InputStream in = FileCopyExample.class.getResourceAsStream("/demo/web.xml");
IOUtils.copy(in, writer);
writer.close();
in.close();
// 5. 輸入流複製到 OutputStream
File srcFile = new File("test.txt");
OutputStream out = new FileOutputStream(srcFile);
InputStream in2 = FileCopyExample.class.getResourceAsStream("/demo/web.xml");
IOUtils.copy(in2, out);
in2.close();
out.close();
} catch (IOException e) {
System.err.println("I/O 操作失敗: " + e.getMessage());
}
}
}
package demo;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
public class FileDeleteExample {
public static void main(String[] args) {
try {
File file = new File(FileDeleteExample.class.getResource("/demo/web.xml").getFile());
// 友好顯示文件大小
String display = FileUtils.byteCountToDisplaySize(file.length());
System.out.println("web.xml 大小: " + display);
// 強制刪除(即使是目錄或只讀文件)
FileUtils.forceDelete(file);
System.out.println("刪除成功");
} catch (IOException e) {
e.printStackTrace();
}
}
}
package demo;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.util.List;
public class FileReadExample {
public static void main(String[] args) throws IOException {
File file = new File(FileReadExample.class.getResource("/demo/web.xml").getFile());
// 一次性讀取所有行到 List(注意大文件記憶體風險)
List<String> lines = FileUtils.readLines(file, "UTF-8");
for (String line : lines) {
System.out.println(line);
}
}
}
FileUtils.lineIterator() 逐行處理,避免 OOM。IOUtils.copy() 內部已處理緩衝,效率較高。IOUtils.closeQuietly()。