首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java FileWriter 追加寫入機制深度解析:為什麼不加 true 也能追加?

     編輯:程式設計綜合問答

現象描述

教程稱 new FileWriter("file.txt", true) 才能追加寫入,否則會覆蓋。但實測發現不加 true 也能追加,這是為什麼?

代碼截圖

核心原理

關鍵在於 FileWriter 對象的生命週期:

  • 同一個 FileWriter 對象:多次 write() 會順序追加,指針自動後移,不需要 true。
  • 新建 FileWriter 對象**:每次 new FileWriter("file.txt") 會截斷文件(覆蓋),除非指定 true 開啟追加模式。

代碼對比

情況 A:同一對象多次寫入(自動追加)

FileWriter fw = new FileWriter("test.txt");
fw.write("第一行\n");
fw.write("第二行\n");  // 直接追加,文件內容:第一行\n第二行\n
fw.close();

情況 B:多次新建對象不加 true(覆蓋)


new FileWriter("test.txt").write("第一行\n");  // 文件:第一行\n
new FileWriter("test.txt").write("第二行\n");  // 文件:第二行\n(第一行被覆蓋)

情況 C:多次新建對象加 true(追加)


new FileWriter("test.txt", true).write("第一行\n");
new FileWriter("test.txt", true).write("第二行\n"); // 文件:第一行\n第二行\n

教程與實測不一致的原因

教程演示的是 情況 B(每次循環新建對象),而你測試時可能無意中使用了 情況 A(循環外創建對象,循環內複用)。

最佳實踐

  • **批量寫入**時,循環外創建 FileWriter,循環內 write(),最後 close()。
  • **分散式寫入**(如不同時刻、不同方法調用)必須使用 new FileWriter(file, true)。
  • 大量數據建議套用 BufferedWriter 提升性能。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved