掌握 Java 字元流檔案操作核心模式:FileReader/FileWriter 搭配 BufferedReader/BufferedWriter 實現高效文字檔案複製。本文提供標準範本代碼,涵蓋參數檢查、資源管理、異常處理全流程。
import java.io.*;
public class CopyChar {
public static void main(String[] args) throws IOException {
if (args.length < 2) {
System.out.println("Usage: java CopyChar source_file target_file");
return;
}
String src = args[0], dest = args[1];
File inputFile = new File(src);
File outputFile = new File(dest);
// try-with-resources 自動關閉資源 (JDK 7+)
try (FileReader in = new FileReader(inputFile);
BufferedReader bin = new BufferedReader(in);
FileWriter out = new FileWriter(outputFile);
BufferedWriter bout = new BufferedWriter(out)) {
int c;
while ((c = bin.read()) != -1) {
bout.write(c);
}
} catch (IOException e) {
System.err.println("File operation failed: " + e.getMessage());
}
}
}
| 類別 | 角色 | 備註 |
|---|---|---|
FileReader | 字元輸入流,連接檔案 | 預設平台編碼,指定編碼請用 InputStreamReader |
BufferedReader | 緩衝字元輸入,減少系統調用 | 提供 readLine() 按行讀取 |
FileWriter | 字元輸出流,連接檔案 | 預設覆蓋模式,追加用 new FileWriter(file, true) |
BufferedWriter | 緩衝字元輸出,批量寫入 | 提供 newLine() 跨平台換行 |
String line;
while ((line = bin.readLine()) != null) {
bout.write(line);
bout.newLine(); // 跨平台換行符
}
try (BufferedReader bin = new BufferedReader(new InputStreamReader(new FileInputStream(inputFile), "UTF-8"));
BufferedWriter bout = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outputFile), "UTF-8"))) {
// 複製邏輯...
}
char[] buffer = new char[8192] 批量讀寫:bin.read(buffer) / bout.write(buffer, 0, len)Files.copy(srcPath, destPath, StandardCopyOption.REPLACE_EXISTING)flush()/close() 導致資料停留在緩衝區 —— 使用 try-with-resources 自動處理。FileWriter 不指定編碼,跨平台產生亂碼 —— 明確指定 StandardCharsets.UTF_8。FileInputStream/FileOutputStream)。