Java FileReader 與 FileWriter
FileReader 和 FileWriter 是用於讀寫文字檔案的字元串流類別。
引入套件
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
FileWriter 寫入檔案
基本寫入
try (FileWriter writer = new FileWriter("output.txt")) {
writer.write("Hello, World!");
writer.write("\n");
writer.write("這是第二行");
} catch (IOException e) {
e.printStackTrace();
}
附加模式
// 第二個參數 true 表示附加模式
try (FileWriter writer = new FileWriter("output.txt", true)) {
writer.write("新增的內容\n");
} catch (IOException e) {
e.printStackTrace();
}
寫入字元陣列
try (FileWriter writer = new FileWriter("output.txt")) {
char[] chars = {'H', 'e', 'l', 'l', 'o'};
writer.write(chars);
// 寫入部分字元
writer.write(chars, 0, 3); // Hel
} catch (IOException e) {
e.printStackTrace();
}
FileReader 讀取檔案
逐字元讀取
try (FileReader reader = new FileReader("input.txt")) {
int ch;
while ((ch = reader.read()) != -1) {
System.out.print((char) ch);
}
} catch (IOException e) {
e.printStackTrace();
}
讀取到字元陣列
try (FileReader reader = new FileReader("input.txt")) {
char[] buffer = new char[1024];
int length;
StringBuilder content = new StringBuilder();
while ((length = reader.read(buffer)) != -1) {
content.append(buffer, 0, length);
}
System.out.println(content);
} catch (IOException e) {
e.printStackTrace();
}
指定編碼
FileReader/FileWriter 使用系統預設編碼,若需指定編碼,使用 InputStreamReader/OutputStreamWriter:
import java.io.*;
import java.nio.charset.StandardCharsets;
// 讀取 UTF-8 檔案
try (Reader reader = new InputStreamReader(
new FileInputStream("input.txt"), StandardCharsets.UTF_8)) {
// 讀取操作
}
// 寫入 UTF-8 檔案
try (Writer writer = new OutputStreamWriter(
new FileOutputStream("output.txt"), StandardCharsets.UTF_8)) {
writer.write("UTF-8 內容");
}
搭配 BufferedReader/BufferedWriter
為提升效能,通常搭配緩衝類別使用:
// 讀取
try (BufferedReader reader = new BufferedReader(new FileReader("input.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
}
// 寫入
try (BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"))) {
writer.write("第一行");
writer.newLine(); // 跨平台換行
writer.write("第二行");
}
實用範例
複製文字檔
public static void copyTextFile(String source, String dest) throws IOException {
try (FileReader reader = new FileReader(source);
FileWriter writer = new FileWriter(dest)) {
char[] buffer = new char[4096];
int length;
while ((length = reader.read(buffer)) != -1) {
writer.write(buffer, 0, length);
}
}
}
讀取檔案為字串
public static String readFileToString(String path) throws IOException {
StringBuilder content = new StringBuilder();
try (BufferedReader reader = new BufferedReader(new FileReader(path))) {
String line;
while ((line = reader.readLine()) != null) {
content.append(line).append(System.lineSeparator());
}
}
return content.toString();
}
重點整理
FileWriter寫入文字檔案,FileReader讀取文字檔案- 使用 try-with-resources 自動關閉串流
- 附加模式:
new FileWriter(path, true) - 需要指定編碼時使用
InputStreamReader/OutputStreamWriter - 搭配
BufferedReader/BufferedWriter提升效能 - 現代 Java 可用
Files.readString()和Files.writeString()