Java zipEntry.getSize() は実際のファイルのサイズを返し、場合によっては -1 を返します (ただし、ファイル サイズは 0 より大きい)。
Java API ドキュメントには、「エントリ データの圧縮されていないサイズを返すか、不明な場合は -1 を返す」と記載されています。
どのような状況で -1 が返されるかわからない、つまり、どのような状況で不明になるのでしょうか?
Java zipEntry.getSize() は実際のファイルのサイズを返し、場合によっては -1 を返します (ただし、ファイル サイズは 0 より大きい)。
Java API ドキュメントには、「エントリ データの圧縮されていないサイズを返すか、不明な場合は -1 を返す」と記載されています。
どのような状況で -1 が返されるかわからない、つまり、どのような状況で不明になるのでしょうか?
驚いたことに、エントリを取得するために 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で見つけたトリック
それが ZipFile エントリ テーブルにある場合は、-1 が返されます。これは、zip ファイル形式の定義の一側面にすぎません。