如何正确关闭从FileOutputStream获取的FileChannel

6

我刚刚在当前的Eclipse Juno Release Candidate中打开了一些旧代码,并注意到一个闪亮的新警告:资源泄漏。它是由这样的代码触发的:

FileChannel out = new FileOutputStream(file).getChannel();
try
{
    ...Do something with out...
}
finally
{
    out.close();
}

Eclipse认为创建的文件输出流是一个资源泄漏。实际上,我不确定这是否是一个虚假警告(FileChannel的close方法也不会关闭流),或者这确实是一个资源泄漏。我将代码更改为:

FileOutputStream outStream = new FileOutputStream(file);
try
{
    FileChannel out = outStream.getChannel();
    ...Do something with out...
}
finally
{
    outStream.close();
}

现在警告已经消失了,但是我不确定是否必须调用FileChannel的close方法。也许应该像这样:

FileOutputStream outStream = new FileOutputStream(file);
try
{
    FileChannel out = outStream.getChannel();
    try
    {
        ...Do something with out...
    }
    finally
    {
        out.close();
    }
}
finally
{
    outStream.close();
}

如果使用文件输入通道和文件输出通道,则会导致四个嵌套的try...finally块,并且所有内容都会变得有点臃肿。
你认为呢?关闭通道和流真的有必要吗?还是仅关闭流就足够了?
1个回答

12
Ah,我在FileOutputStream的close()方法文档中找到了答案:
If this stream has an associated channel then the channel is closed as well.

所以,关闭流就足够了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接