本範例示範如何使用 FileWriter 寫入學號與姓名至文字檔,再使用 FileReader 讀取並顯示在螢幕上。適合 Java 初學者掌握基礎 IO 操作流程。
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class TextRw {
public static void main(String[] args) {
File file = new File("d:/TextRw.txt");
try {
// 1. 建立檔案(若不存在)
if (!file.exists()) {
file.createNewFile();
System.out.println("檔案建立成功");
}
// 2. 寫入資料
try (FileWriter fw = new FileWriter(file)) {
fw.write("學號:10001,姓名:唐楓");
System.out.println("資料寫入完成");
}
// 3. 讀取資料
try (FileReader fr = new FileReader(file)) {
char[] buffer = new char[1024];
int charsRead = fr.read(buffer);
String content = new String(buffer, 0, charsRead);
System.out.println("檔案內容:" + content);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
File file = new File("d:/TextRw.txt");
if (!file.exists()) {
file.createNewFile(); // 原子性建立,避免競態條件
}
new OutputStreamWriter(new FileOutputStream(file), "UTF-8")char[] 批次讀取read(char[]) 回傳實際讀取字元數new String(buffer, 0, charsRead) 精確建立字串import java.io.*;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
public class TextRwAdvanced {
private static final String FILE_PATH = "d:/TextRw.txt";
private static final String CONTENT = "學號:10001,姓名:唐楓";
public static void main(String[] args) {
// 寫入:指定 UTF-8 編碼 + 緩衝
try (BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(new FileOutputStream(FILE_PATH), StandardCharsets.UTF_8))) {
writer.write(CONTENT);
writer.newLine();
System.out.println("寫入完成(UTF-8)");
} catch (IOException e) {
e.printStackTrace();
}
// 讀取:NIO.2 一行程式碼(Java 7+)
try {
String content = Files.readString(Paths.get(FILE_PATH), StandardCharsets.UTF_8);
System.out.println("檔案內容:" + content.trim());
} catch (IOException e) {
e.printStackTrace();
}
}
}
| 問題 | 原因 | 解決方案 |
|---|---|---|
| 中文亂碼 | 平台預設編碼不一致(Windows GBK vs Linux UTF-8) | 明確指定 StandardCharsets.UTF_8 |
| 資料截斷 | 緩衝區大小不足 | 使用 BufferedWriter/BufferedReader 或 NIO Files.readString |
| 檔案鎖定 | 未正確關閉流 | 強制使用 try-with-resources |
| 路徑分隔符 | Windows \ vs Unix / | 使用 File.separator 或 Paths.get() |
Files.readString/writeString 最簡潔BufferedReader/BufferedWriter 逐行處理Files.lines() 串流處理或 MappedByteBuffer 記憶體映射掌握 FileWriter/FileReader 基礎操作是 Java IO 入門關鍵,實際專案建議優先使用 NIO.2 (java.nio.file.Files) 簡化程式碼並提升可靠性。