У меня есть вспомогательный класс со статическим методом, который возвращает поток:
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"));
}
}
or 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
Как сделать так, чтобы ресурс был закрыт, после его использования?