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

Java 文本文件操作完全指南:Reader/Writer 體系與最佳實踐

     編輯:Java 程式設計入門

早期 Java 不支援文本文件處理,引入 Reader、Writer 兩個抽象類彌補。Writer 的 write(char[], int, int)、flush()、close() 為抽象方法;Reader 的 read(char[], int, int)、close() 為抽象方法,子類需分別實現。

讀取文本文件

常用類:FileReader、InputStreamReader、BufferedReader。關鍵橋梁是 InputStreamReader:位元組轉字符,構造器可指定編碼(不指定用 OS 默認如 GBK)。

FileReader 讀取

FileReader fr = new FileReader("ming.txt");
int ch = 0;
while ((ch = fr.read()) != -1) {
    System.out.print((char) ch);
}

read() 返回下一字符。也可用 read(char[], int, int) 批量讀取,類似二進制處理。

InputStreamReader 讀取

InputStreamReader isr = new InputStreamReader(new FileInputStream("ming.txt"), "UTF-8");
int ch = 0;
while ((ch = isr.read()) != -1) {
    System.out.print((char) ch);
}

實際上 FileReader 方法皆繼承自 InputStreamReader,無本質區別。

BufferedReader 高效讀取

read() 較耗時。用 BufferedReader 包裝提速,可逐行讀取:

BufferedReader br = new BufferedReader(
    new InputStreamReader(new FileInputStream("ming.txt"), "UTF-8"));
String line;
while ((line = br.readLine()) != null) {
    System.out.println(line);
}

寫入文本文件

對應讀取,寫入同樣簡單。注意:寫入數據先進緩衝區,需主動 flush() 強制寫入文件。

FileWriter 寫入

FileWriter fw = new FileWriter("out.txt");
fw.write("Hello World");
fw.flush();
fw.close();

BufferedWriter 高效寫入

BufferedWriter bw = new BufferedWriter(
    new OutputStreamWriter(new FileOutputStream("out.txt"), "UTF-8"));
bw.write("第一行");
bw.newLine(); // 跨平台換行
bw.write("第二行");
bw.flush();
bw.close();

核心最佳實踐

  1. 始終指定編碼:構造 InputStreamReader/OutputStreamWriter 時顯式指定 "UTF-8",避免跨平台亂碼
  2. 使用 try-with-resources (Java 7+):自動關閉資源,防洩漏
  3. 大文件必用緩衝:BufferedReader/BufferedWriter 批量處理,減少系統調用
  4. 逐行處理用 readLine():自動處理 \n、\r、\r\n 跨平台換行符
  5. 字符集轉換:StandardCharsets.UTF_8 替代字符串 "UTF-8",編譯期檢查

現代補充:Files API (Java 7+)


// 讀取所有行
List lines = Files.readAllLines(Paths.get("file.txt"), StandardCharsets.UTF_8);

// 流式處理大文件
try (Stream stream = Files.lines(Paths.get("file.txt"))) {
    stream.filter(s -> s.contains("error")).forEach(System.out::println);
}

// 寫入
Files.write(Paths.get("out.txt"), Arrays.asList("line1", "line2"), StandardCharsets.UTF_8);

Files、Paths、StandardCharsets 讓文本處理更簡潔安全。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved