2016-08-11 13 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の公約の一部として記載されていないため、作成するすべてのストリームを明示的に閉じることをお勧めします。

関連する問題