没有try / catch块关闭InputStream?

时间:2016-04-25 12:26:32

标签: java inputstream

我知道应该关闭InputStream。但是我有些怀疑在哪里以及如何做到这一点。

根据IOUtils.closeQuietly上的文件:

  

无条件关闭InputStream。相当于   InputStream.close(),除了任何异常都将被忽略。 这是   通常用于finally块

我的代码中不需要try/catch块,因此我没有finally块。在我的方法中返回之前关闭InputStream是否可以,或者我应该采取不同的做法?多个服务将使用此方法从文件加载InputStream

public InputStream read(String filename) {
    InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(filename);

    if (inputStream == null) {
      // Throw some exception
    }

    IOUtils.closeQuietly(inputStream);

    return inputStream;
}

2 个答案:

答案 0 :(得分:7)

在这种方法中你根本不应该调用IOUtils.closeQuietly(inputStream); - 返回一个封闭的流是没有意义的。

但是,应该在try / finally块中调用这个方法:

InputStream is = null;
try {
  is = read(filename);
  // Do whatever with is.
} finally {
  IOUtils.closeQuietly(is);
}

或使用try-with-resources(注意评论here“try-with-resources语句将消除使用IOUtils.closeQuietly的大部分需求”):

try (InputStream is = read(filename)) {
  // Do whatever with is.
}

答案 1 :(得分:0)

尝试/终止阻止:

  

InputStream = null;          尝试{               InputStream =               is = read(filename);               //做任何事情。               } finally {                  is.close();               }

注意:所有i / o资源都需要在finally块中关闭,因为它是在try-catch块中初始化的。还建议添加:

} catch(IOException e){
   e.printstacktrace();
}

...用于异常处理