2014-03-03 101 views
2
File file = new File("result.csv"); 
FileWriter fw = new FileWriter(file.getAbsoluteFile()); 
BufferedWriter bw = new BufferedWriter(fw); 

如果我們在寫入完成後沒有關閉緩衝寫入器對象會發生什麼?我的意思是如果我們錯過了bw.close()?Java緩衝寫入器

回答

4

如果你打開很多文件,如果你不關閉它們,您的操作系統將無法一段時間後,打開任何文件。

而且,當你的BufferedWriter一直沒有垃圾回收,它在寫文件將繼續開放,只要你的操作系統有關。如果這是Windows,在文件句柄被關閉,或者通過收集BufferedWriter終於被垃圾或由JVM退出,你將無法刪除該文件。

  • BufferedWriter.close()刷新緩衝區底層流,因此,如果您忘記flush(),不要靠近,你的文件可能沒有你寫信給它的文本。

  • BufferedWriter.close()也關閉包裹作家。如果這是一個FileWriter,這將最終關閉FileOutputStream,告訴你完成寫入文件的OS。

  • 垃圾收集器將自動調用close(),而不是在BufferedWriter或包裹FileWriter的,但在FileOuputStream。所以操作系統會很開心,但你必須等待GC。

  • 但是,你總是想,只要你不再需要它們釋放OS資源。這適用於打開的文件,數據庫連接,打印隊列......任何東西。相信我這一個。

  • BufferedWriter.close()會清除內部字符緩衝區,以便內存可用於垃圾回收,即使BufferedWriter本身仍在範圍內。

檢查here更多細節