Java IO 體系以「流」為抽象,分為位元組流(InputStream/OutputStream)與字符流(Reader/Writer)兩大家族。本文通過完整代碼範例,系統講解讀寫操作四大核心步驟、常用實現類與最佳實踐。
File 定位目標檔案FileOutputStreamFile file = new File("f:" + File.separator + "zdb1.txt");
try (OutputStream out = new FileOutputStream(file, true)) { // true 為追加模式
String str = "十年規劃,方向明確,不再迷失。";
out.write(str.getBytes());
} // 自動關閉
FileInputStream 兩種讀法try (InputStream in = new FileInputStream(file)) {
byte[] buf = new byte[1024];
int len = in.read(buf);
System.out.println(new String(buf, 0, len));
}
byte[] buf = new byte[(int) file.length()];
for (int i = 0; i < buf.length; i++) {
buf[i] = (byte) in.read();
}
System.out.println(new String(buf));
FileReader/FileWriter字符流內建緩衝,直接操作 char 陣列或 String,寫入需 flush() 或 close() 強制刷新:
// 讀取
try (Reader in = new FileReader(file)) {
char[] cbuf = new char[1024];
int len = in.read(cbuf);
System.out.println(new String(cbuf, 0, len));
}
// 寫入
try (Writer writer = new FileWriter(file, true)) {
writer.write("你今天好好學習了嗎?");
}
| 維度 | 位元組流 | 字符流 |
|---|---|---|
| 基本單位 | byte (8 bits) | char (16 bits) |
| 緩衝機制 | 直接操作檔案,無緩衝 | 經過緩衝區處理 |
| 適用場景 | 圖片、視頻、二進制檔案 | 文本檔案、字符編碼轉換 |
| 關閉行為 | 直接關閉 | 需刷新緩衝區才生效 |
實務上:傳輸與存儲皆以位元組為本,操作文本優先選字符流;需轉碼時用 InputStreamReader/OutputStreamWriter 橋接。