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

關鍵在於 FileWriter 對象的生命週期:
write() 會順序追加,指針自動後移,不需要 true。new FileWriter("file.txt") 會截斷文件(覆蓋),除非指定 true 開啟追加模式。FileWriter fw = new FileWriter("test.txt");
fw.write("第一行\n");
fw.write("第二行\n"); // 直接追加,文件內容:第一行\n第二行\n
fw.close();
new FileWriter("test.txt").write("第一行\n"); // 文件:第一行\n
new FileWriter("test.txt").write("第二行\n"); // 文件:第二行\n(第一行被覆蓋)
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 提升性能。