File file = new File("result.csv");
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
如果我們在寫入完成後沒有關閉緩衝寫入器對象會發生什麼?我的意思是如果我們錯過了bw.close()?Java緩衝寫入器
File file = new File("result.csv");
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
如果我們在寫入完成後沒有關閉緩衝寫入器對象會發生什麼?我的意思是如果我們錯過了bw.close()?Java緩衝寫入器
如果你打開很多文件,如果你不關閉它們,您的操作系統將無法一段時間後,打開任何文件。
而且,當你的BufferedWriter
一直沒有垃圾回收,它在寫文件將繼續開放,只要你的操作系統有關。如果這是Windows,在文件句柄被關閉,或者通過收集BufferedWriter
終於被垃圾或由JVM退出,你將無法刪除該文件。
BufferedWriter.close()
刷新緩衝區底層流,因此,如果您忘記flush()
,不要靠近,你的文件可能沒有你寫信給它的文本。
BufferedWriter.close()
也關閉包裹作家。如果這是一個FileWriter,這將最終關閉FileOutputStream
,告訴你完成寫入文件的OS。
垃圾收集器將自動調用close()
,而不是在BufferedWriter
或包裹FileWriter的,但在FileOuputStream
。所以操作系統會很開心,但你必須等待GC。
但是,你總是想,只要你不再需要它們釋放OS資源。這適用於打開的文件,數據庫連接,打印隊列......任何東西。相信我這一個。
BufferedWriter.close()
會清除內部字符緩衝區,以便內存可用於垃圾回收,即使BufferedWriter
本身仍在範圍內。
檢查here更多細節