关闭作为方法返回的资源

lrl1mhuk  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(326)

我有一个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

如何确保该资源在使用后将被关闭?

d7v8vwbk

d7v8vwbk1#

通常,调用者负责关闭/释放资源。
可以在方法外部使用try with资源或try finally构造,如下所示:

try (InputStream is = getDocument(aFile) {
    //… do your stuff
}

如果我能给你一个建议,请写在方法文档中:

/**
  * The caller is required to close the returned {@link InputStream}
  */
public static InputStream getDocument(File file) throws IOException

相关问题