2016-08-11 53 views
1
FileOutputStream fos = new FileOutputStream(f, true); 
FileChannel fileChannel = fos.getChannel(); 
FileWriter fileWriter = Channels.newWriter(fileChannel, Charset.forName("UTF-8").newEncoder(), -1); 
.... 
fileWriter.close() 

我收到一個編譯器警告,因爲'fos'沒有關閉,我有資源泄漏。我假設,但迄今未能證明,當我調用'fileWriter.close()'時,資源被清理。這真的是資源泄漏

+0

爲什麼不試試資源?那麼你將不需要擔心關閉它們:) – derp

+0

有時在Java 6和Java 5環境中部署陷阱......因此... – ticktock

回答

3

不,這不是資源泄漏,但編譯器不夠聰明,以解決這個問題。

當您關閉FileWriter時,它會關閉FileChannel,然後關閉FileOutputStream

這當然,不同的JVM的情況可能不是這樣。我只查看了Oracle的Java8 rt.jar中的代碼。

由於它沒有被公佈爲FileWriter的公共合同的一部分,所以明確關閉您創建的所有流是一個好主意。