【问题标题】:how to check if a ZIP file is empty in Java?如何检查Java中的ZIP文件是否为空?
【发布时间】:2012-06-29 08:32:32
【问题描述】:

我有以下代码 -

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ZipOutputStream zos = new ZipOutputStream(outputStream);

for (int i = 0; i < params.getGrades().size(); i++) {
generateReport(param1, param2, zos);
}

zos.flush();
zos.close();

在 generateReport 方法中,我有代码将我的报告生成为 xls 文件并将它们添加到 ZIP。

有什么方法可以检查 ZIP 文件中是否写入了任何文件,或者 ZIP 文件是否为空?有什么我可以使用的财产吗?

谢谢, 拉兹

【问题讨论】:

  • 也许你可以简单地修改generateReport,让它在添加一些文件时返回true。如果没有对generateReport 的调用返回true,那么你的zip 是空的……
  • 谢谢,但我想到了.. 在将文件添加到 ZIP 之前,我调用了很多方法,所以如果我的 ZIP 文件为空,则如果我有一个返回 true 的标志,那么我会从所有这些方法中传回标志。

标签: java zipoutputstream


【解决方案1】:

您可以使用 java.util.zip 包中的ZipFile。

你可以调用

size()

方法。

【讨论】:

  • 有没有办法找到 ZipOutputStream 的大小?
  • 无,ZipOutputStream 用于写入(添加条目)。计算 zip 文件的条目是一个读取操作。
  • 是的,我意识到了这一点,但由于各种原因我无法使用 ZipFile 选项。
【解决方案2】:

关闭zos, 后,outputStream.size() 会为您提供写入的字节数。您必须允许空 ZIP 文件的 ZIP 标头大小。

【讨论】:

【解决方案3】:
【解决方案4】:

@Raaz,请通过这个link。

您可以在其中看到一个名为“ZipEntry”的类。它表示 zip 文件夹中包含的文件。它提供了一些有用的方法,例如:

zipEntry.getName(); // name of the file contained by zip.
zipEntry.getSize(); // size of the file contained by zip.

【讨论】:

  • 我浏览了你提到的链接。我看到它需要我有一个 ZipInoutStream 对象,我可以从中获取条目。我有一个 ZipOutputStream 对象,我已将文件写入其中......并且想知道创建的文件是否为空..
【解决方案5】:

@Didier - 我决定接受你关于返回值的建议,但最终还是这样做了 -

我没有检查文件是否已添加到 ZIP,而是检查了我尝试写入 xls 文件(该文件又被添加到 ZIP 的文件)中的列表数据是否为空。如果它为空,那么我将错误值设置为“未生成文件”。如果列表不为空,我将一个空值分配给字符串并将其返回给调用函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-12
    • 1970-01-01
    • 1970-01-01
    • 2015-04-13
    • 1970-01-01
    • 2015-05-02
    • 1970-01-01
    相关资源
    最近更新 更多