首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 字元流檔案讀寫完整教學:BufferedReader/Writer 高效複製實戰

     編輯:Java 相關知識

掌握 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(); // 跨平台換行符
}

指定字元編碼(UTF-8 範例)


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)
  • 或直接用 NIO.2:Files.copy(srcPath, destPath, StandardCopyOption.REPLACE_EXISTING)

常見錯誤避坑

  1. ❌ 忘記 flush()/close() 導致資料停留在緩衝區 —— 使用 try-with-resources 自動處理。
  2. ❌ 直接用 FileWriter 不指定編碼,跨平台產生亂碼 —— 明確指定 StandardCharsets.UTF_8。
  3. ❌ 二進位檔案(圖片、壓縮包)用字元流複製損壞內容 —— 二進位檔案必須用位元組流(FileInputStream/FileOutputStream)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved