Java 如何正确关闭从FileOutputStream获取的FileChannel
我刚刚在当前的Eclipe Juno候选版本中打开了一些旧代码,并注意到一个闪亮的新警告:资源泄漏。它是由如下代码触发的:Java 如何正确关闭从FileOutputStream获取的FileChannel,java,eclipse,nio,eclipse-juno,Java,Eclipse,Nio,Eclipse Juno,我刚刚在当前的Eclipe Juno候选版本中打开了一些旧代码,并注意到一个闪亮的新警告:资源泄漏。它是由如下代码触发的: FileChannel out = new FileOutputStream(file).getChannel(); try { ...Do something with out... } finally { out.close(); } FileOutputStream outStream = new FileOutputStream(file); tr
FileChannel out = new FileOutputStream(file).getChannel();
try
{
...Do something with out...
}
finally
{
out.close();
}
FileOutputStream outStream = new FileOutputStream(file);
try
{
FileChannel out = outStream.getChannel();
try
{
...Do something with out...
}
finally
{
out.close();
}
}
finally
{
outStream.close();
}
Eclipse认为创建的文件输出流是一个资源泄漏。实际上,我不确定这是否是一个错误的警告(FileChannel的close方法也不关闭流),或者这是否真的是一个资源泄漏。我将代码更改为:
FileOutputStream outStream = new FileOutputStream(file);
try
{
FileChannel out = outStream.getChannel();
...Do something with out...
}
finally
{
outStream.close();
}
警告现在消失了,但我不确定是否必须调用FileChannel的close方法。所以也许它看起来应该是这样的:
FileChannel out = new FileOutputStream(file).getChannel();
try
{
...Do something with out...
}
finally
{
out.close();
}
FileOutputStream outStream = new FileOutputStream(file);
try
{
FileChannel out = outStream.getChannel();
try
{
...Do something with out...
}
finally
{
out.close();
}
}
finally
{
outStream.close();
}
如果使用一个文件输入通道和一个文件输出通道,那么这将导致四个嵌套的try…finally块,所有这些都会变得有点臃肿
你觉得怎么样?是否真的有必要关闭通道和溪流?还是关闭流就足够了?啊,在FileOutputStream的close()方法的文档中找到了答案:
If this stream has an associated channel then the channel is closed as well.
因此,关闭流就足够了