我有一个helper类,它带有一个返回流的静态方法:
public static InputStream getDocument(File file) throws IOException {
ZipFile zipFile = new ZipFile(file);
return zipFile.getInputStream(zipFile.getEntry("entry"));
}
另一个类访问该方法并使用返回的流:
InputStream is = MyClass.getDocument(new File(str));
我的代码有效。
但是,根据java文档,我应该关闭我的资源:
资源是一个必须在程序完成后关闭的对象。try with resources语句确保在语句末尾关闭每个资源。
但是,当我实施 try-with-resources
:
public static InputStream getDocument(File file) throws IOException {
try (ZipFile zipFile = new ZipFile(file);) {
return zipFile.getInputStream(zipFile.getEntry("entry"));
}
}
或者 try-finally
:
public static InputStream getDocument(File file) throws IOException {
InputStream is = null;
try {
ZipFile zipFile = new ZipFile(docx);
is = zipFile.getInputStream(zipFile.getEntry("entry"));
return is;
} finally {
is.close();
}
}
我有个例外:
java.io.IOException: Stream closed
如何确保该资源在使用后将被关闭?
1条答案
按热度按时间d7v8vwbk1#
通常,调用者负责关闭/释放资源。
可以在方法外部使用try with资源或try finally构造,如下所示:
如果我能给你一个建议,请写在方法文档中: