2012-06-29 115 views
1

我有下面的代码块 -如何检查Java中的ZIP文件是否为空?

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文件是空的?有没有我可以使用的任何财产?

感谢, Raaz

+1

也许你可以简单地修改'generateReport',以便它返回时,它增加了一些文件'真'。如果以'generateReport'没有呼叫返回TRUE,那么你的拉链是空的... –

+0

谢谢,但我想到这一点。我叫了很多的方法之前,我在我的文件添加到ZIP,所以如果我有一个标志返回true如果我的ZIP文件是空的,那么我将不得不传回所有这些方法的标志。 – Raaz

回答

0

@Didier - 我决定采取在返回值你的建议,但最终做这种方式 -

相反,如果一个文件被添加到ZIP检查,我检查如果列表数据I试图写入一个xls文件(该文件又被添加到ZIP中)是空的。如果它是空的,那么我将一个错误值设置为“No file generated”。如果列表不为空,我将一个空值赋给字符串并将其返回给调用函数。

3

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

可以调用

size() 

方法。

+2

没有办法找到ZipOutputStream的大小吗? – Raaz

+0

无,ZipOutputStream用于写入(添加条目)。计算zip文件的条目是一个读取操作。 – Joset

+0

是的,我意识到,但事实证明,我不能使用ZipFile选项的各种原因。 – Raaz

0

@Raaz,请通过此link

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

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

我经历了你提到的链接..我看到它需要我有一个ZipInoutStream对象,我可以从中获取条目。我到我所书面文件到..,想知道是否创建该文件是空在一个ZipOutputStream对象.. – Raaz

2

后关闭zos,outputStream.size()给你写入的字节数。您将不得不允许ZIP压缩文件的大小为空。

+0

仅供参考它的'22'的http://计算器。com/a/41507106/360211,而且令人惊讶的不是“标题”,而是目录记录的结尾。 – weston