当前位置:  开发笔记 > 编程语言 > 正文

关闭Java FileInputStream

如何解决《关闭JavaFileInputStream》经验,为你挑选了3个好方法。

好吧,我一直在做以下(变量名已被更改):

FileInputStream fis = null;
try
{
    fis = new FileInputStream(file);

    ... process ...

}
catch (IOException e)
{
    ... handle error ...
}
finally
{
    if (fis != null)
        fis.close();
}

最近,我开始使用FindBugs,这表明我没有正确关闭流.我决定看看是否有任何可以用finally {}块做的事情,然后我看,哦是的,close()可以抛出IOException.人们应该在这做什么?Java库会抛出太多已检查的异常.



1> McDowell..:

对于Java 7及更高版本,应使用try-with-resources:

try (InputStream in = new FileInputStream(file)) {
  // TODO: work
} catch (IOException e) {
  // TODO: handle error
}

如果你坚持使用Java 6或更低版本......

这种模式避免了使用null进行乱码:

    try {
        InputStream in = new FileInputStream(file);
        try {
            // TODO: work
        } finally {
            in.close();
        }
    } catch (IOException e) {
        // TODO: error handling
    }

有关如何有效处理close的更多细节,请阅读此博文:Java:如何不弄乱流处理.它有更多的样本代码,更深入,覆盖包装的陷阱密切捕捉块.



2> Max Stewart..:

类似下面的内容应该这样做,取决于您是否在尝试关闭流时抛出或吞下IOException.

FileInputStream fis = null;
try
{
    fis = new FileInputStream(file);

    ... process ...


}
catch (IOException e)
{
    ... blah blah blah ...
}
finally
{
    try
    {
        if (fis != null)
            fis.close();
    }
    catch (IOException e)
    {
    }
}



3> Edwin Dalorz..:

您可以使用添加了JDK7 的try-with-resources功能.它的创建恰恰是为了处理这类事情

static String readFirstLineFromFile(String path) throws IOException {
  try (BufferedReader br = new BufferedReader(new FileReader(path))) {
    return br.readLine();
  }
}

该文件说:

try-with-resources语句确保在语句结束时关闭每个资源.

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有