Java 寫文件有兩條主流路徑,本質區別在於字節流與字符流。
File fout = new File(filePath);
FileOutputStream fos = new FileOutputStream(fout);
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(fos, "UTF-8"));
out.write("something");
FileWriter fw = new FileWriter(filePath);
BufferedWriter out = new BufferedWriter(fw);
out.write("something");
FileWriter 是裝飾器模式經典應用:
// 簡化結構 FileWriter extends OutputStreamWriter extends Writer // OutputStreamWriter 將字節流轉為字符流(指定編碼) // BufferedWriter 增加緩衝提升性能
| 維度 | FileOutputStream | FileWriter |
|---|---|---|
| 數據類型 | byte[] / int(byte) | char[] / String / int(char) |
| 編碼控制 | 需手動指定 OutputStreamWriter(charset) | 構造器可指定編碼,默認平台編碼 |
| 適用場景 | 二進制文件、圖片、序列化輸出 | 文本文件、配置、日誌、報表 |
| 轉字節數組 | 直接支援 | 需經 OutputStreamWriter |
FileWriter 或 Files.writeString() (JDK 11+)FileOutputStream 或 Files.write()OutputStreamWriter + FileOutputStreamBufferedWriter 包裝 + 適當緩衝區來源:ProgramCreek