可以确定要解压缩的文件大小?

时间:2012-06-06 17:43:37

标签: java android android-asynctask

我目前有以下代码,它使用ZipInputStream将zip文件解压缩到手机上的目标位置:

ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(sourceZipFile));
ZipEntry zipEntry = null;

while ((zipEntry = zipInputStream.getNextEntry()) != null)
{
  File zipEntryFile = new File(targetFolder, zipEntry.getName());
  // write contents of 'zipEntry' to 'zipEntryFile'

有没有人知道是否有可能(使用上面的设置或其他方式)获得(估计)开始前要解压缩的文件或字节总数,以及在解压缩过程中增加进度?我认为ZipInputStream可能有getTotalEntries()或类似方法但找不到这样的内容...

2 个答案:

答案 0 :(得分:3)

使用ZipEntry#getSize()方法。它返回未压缩文件的大小。

如果ZIP文件中有多个条目(文件),则首先迭代它们(不提取它们),并将所有文件大小加在一起。这可能是一个非常好的估计。

注意,如果您需要知道这些文件在磁盘上占用的确切字节数,您还需要知道文件系统中cluster的确切大小。

答案 1 :(得分:1)

正如npe所述,ZipEntry将从zip文件中获取文件的未压缩大小。

我认为您需要做的是使用

执行一次传递
getNextEntry

直到完成,计算沿途的条目(大小和条目数量),然后重新开始实际的解压缩