我知道应该关闭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;
}
答案 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();
}
...用于异常处理