我应该关闭由 ZipOutputStream 包装的 FileOutputStream

should i close FileOutputStream which is wrapped by ZipOutputStream

我正在写一个批处理过程,下面将在循环中被调用很多次。所以我想知道我是否正确关闭了资源

//这将在循环中调用

    FileOutputStream fos = null;
    ZipOutputStream zos = null;
    try {
        fos = new FileOutputStream(zipFile);
        zos = new ZipOutputStream(fos);
     ...
     ...
     closeQuietly(zos)
     } catch(Exception e) {log.error(e.getMessage(),e);}

void closeQuietly(ZipOutputStream zos) {
        try {
            zos.closeEntry();
            zos.flush();
            zos.close();
        }
        catch(Exception e) {log.error(e.getMessage(),e);}
    }

我是否正确关闭了资源。我是否还需要在 closeQuietly()

中关闭 FileOutputStream

也可以通过尝试资源来达到,比如

  try (
      fos = new FileOutputStream(zipFile);
        zos = new ZipOutputStream(fos)
    ) {
    your code  
    
 }

如果您查看 documentation,您会发现 .close()“关闭 ZIP 输出流以及被过滤的流。”

所以你这样做应该没问题