我目前有以下代码,它使用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()
或类似方法但找不到这样的内容...
答案 0 :(得分:3)
使用ZipEntry#getSize()
方法。它返回未压缩文件的大小。
如果ZIP文件中有多个条目(文件),则首先迭代它们(不提取它们),并将所有文件大小加在一起。这可能是一个非常好的估计。
注意,如果您需要知道这些文件在磁盘上占用的确切字节数,您还需要知道文件系统中cluster
的确切大小。
答案 1 :(得分:1)
正如npe所述,ZipEntry将从zip文件中获取文件的未压缩大小。
我认为您需要做的是使用
执行一次传递getNextEntry
直到完成,计算沿途的条目(大小和条目数量),然后重新开始实际的解压缩