Java 在没有try/catch块的情况下关闭InputStream?

Java 在没有try/catch块的情况下关闭InputStream?,java,inputstream,Java,Inputstream,我知道应该关闭InputStream。但我有一些疑问,在哪里以及如何做到这一点 根据以下文件: 无条件关闭输入流。相当于 InputStream.close(),但将忽略任何异常这是 通常用于finally块 我的代码中不需要try/catch块,因此我没有finally块。在使用下面的方法返回InputStream之前,关闭InputStream可以吗?或者我应该做些不同的事情吗?多个服务将使用此方法从文件加载InputStream public InputStream read(String

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

根据以下文件:

无条件关闭输入流。相当于 InputStream.close(),但将忽略任何异常这是 通常用于finally块

我的代码中不需要
try/catch
块,因此我没有
finally
块。在使用下面的方法返回InputStream之前,关闭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;
}

您不应该安静地调用
IOUtils.closes(inputStream)
但是,应在try/finally块中调用此方法:

InputStream is = null;
try {
  is = read(filename);
  // Do whatever with is.
} finally {
  IOUtils.closeQuietly(is);
}
或者使用try with resources(注意“try with resources语句将消除大多数使用
IOUtils.closequilly
”的需要):

try/finally块:

InputStream is = null;
try {
  is = read(filename);
  // Do whatever with is.
} finally {
  IOUtils.closeQuietly(is);
}
InputStream=null; 试一试{ 输入流是= is=读取(文件名); //用它做任何事。 }最后{ is.close(); }

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

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

…对于异常处理

查看您的方法,它不应该是关闭
InputStream
的方法。让调用者适当地关闭它。为什么返回的是
InputStream
,而不是文件的内容?@ndrone因为还有其他逻辑需要文件作为
InputStream
。但这与imo的问题无关。我想我只是想了解封闭的
InputSteam
对于其他逻辑有什么好处。但您似乎找到了答案我有多个服务需要从文件中读取
InputStream
,而文件又需要使用
ObjectMapper
映射到一些
对象。我想要分离关注点(从文件读取,映射到对象),并且我想要重用逻辑。我可以使用一个抽象的父类,静态实用程序类。我的观点是,我的read方法在任何时候都不会抛出异常,所以我不需要try/catch。所以我没有最后一个街区。我还应该用try/finally来包围它吗?“我的read方法在任何时候都不会抛出异常”当然,也许,现在。如果你改变方法怎么办?这只是消除不关闭流的可能性的最佳实践。感谢这里的有用提示。我将重构我的代码以使其更好。还忘了--is.flush();