Java zipEntry.getSize() 方法返回实际文件的大小,有时会返回-1(尽管文件大小大于0)。
Java API文档中说:“返回条目数据的未压缩大小,如果不知道则为-1。”
不确定在什么情况下它会返回-1,即在什么情况下它是未知的?
Java zipEntry.getSize() 方法返回实际文件的大小,有时会返回-1(尽管文件大小大于0)。
Java API文档中说:“返回条目数据的未压缩大小,如果不知道则为-1。”
不确定在什么情况下它会返回-1,即在什么情况下它是未知的?
ZipFile zipfile = new ZipFile("myFile.zip");
java.util.Enumeration zipEnum = zipfile.entries();
while (zipEnum.hasMoreElements ())
{
ZipEntry entry = (ZipEntry) zipEnum.nextElement();
if (! entry.isDirectory ())
{
// entry.getName()
// entry.getSize ()
// entry.getCompressedSize ()
}
}
发现的技巧可在http://vimalathithen.blogspot.de/2006/06/using-zipentrygetsize.html找到。
如果ZipFile entry表中的内容是-1,那么您将得到一个返回值。这只是zip文件格式定义的一个方面。
这段代码将返回zipEntry的正确大小:
ZipInputStream( BufferedInputStream( cr.openInputStream(zipUri) ) ).use { srcZipStream ->
var zipEntry: ZipEntry?
while (srcZipStream.nextEntry.also { zipEntry = it} != null) {
srcZipStream.closeEntry()
allZipEntryList.add(zipEntry!!.name)
Log.e("wkExtract",zipEntry!!.name+" size= "+zipEntry!!.size+" compressed size= "+zipEntry!!.compressedSize)
}
}
getSize
,则会返回正确的大小。很奇怪。 - rogerdpack