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 :(得分:3)
不,它不是资源泄漏,但编译器不够聪明,无法解决这个问题。
当您关闭FileWriter
时,会关闭FileChannel
,然后关闭FileOutputStream
。
当然,这可能与不同的JVM不同。我只看了Oracle的Java8 rt.jar
中的代码。
由于它未作为FileWriter
公共合同的一部分声明,因此明确关闭您创建的所有流最好。