9

Java zipEntry.getSize() は実際のファイルのサイズを返し、場合によっては -1 を返します (ただし、ファイル サイズは 0 より大きい)。

Java API ドキュメントには、「エントリ データの圧縮されていないサイズを返すか、不明な場合は -1 を返す」と記載されています。

どのような状況で -1 が返されるかわからない、つまり、どのような状況で不明になるのでしょうか?

4

2 に答える 2

7

驚いたことに、エントリを取得するために ZipInputStream の代わりに ZipFile を使用すると、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で見つけたトリック

于 2016-10-25T20:37:18.397 に答える
0

それが ZipFile エントリ テーブルにある場合は、-1 が返されます。これは、zip ファイル形式の定義の一側面にすぎません。

于 2016-03-16T19:41:32.810 に答える