2016-03-16 2 views
2

Java zipEntry.getSize() возвращает размер фактического файла и несколько раз возвращает -1 (хотя размер файла больше 0).java zipentry getsize возвращает -1

Документ API Java говорит: «Возвращает несжатый размер входных данных или -1, если не известен».

Не уверен, в какой ситуации он вернется -1, то в какой ситуации он будет неизвестен?

+0

FWIW, если вы звоните 'getSize' после чтения потока для этого ZipEntry, то он возвращает правильный размер. Weird. – rogerdpack

ответ

1

вы получите возврат -1, если это то, что находится в таблице записей ZipFile. Это довольно просто аспект определения формата zip-файла.

2

С помощью ZipFile вместо ZipInputStream для получения записей делает getSize и getCompressedSize для возврата правильных значений.

 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