3

私は一方のzipからファイルを取得し、もう一方のzipにファイルを配置するアプリケーションに取り組んでいます。ファイルは問題ありませんが、ソースzipにdirがある場合は、次の例外で失敗します。

Exception in thread "main" java.util.zip.ZipException: invalid entry size (expected 1374 but got 1024 bytes)

私は次のコードを使用しています:

public static void ZipExtractToZip(File inZip, File outZip) throws IOException
{
    ZipInputStream zis = new ZipInputStream(new FileInputStream(inZip));
    ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(outZip)));
    byte[] buffer = new byte[1024];

    for (ZipEntry ze = zis.getNextEntry(); ze != null; ze = zis.getNextEntry()) 
    {
        zos.putNextEntry(ze);
        for (int read = zis.read(buffer); read != -1; read = zis.read(buffer)) {
            zos.write(buffer, 0, read);
        }
        zos.closeEntry();
    }

    zos.close();
    zis.close();
}

さまざまなバッファサイズを試しましたが、それは役に立ちません。動的バッファサイズを取得する方法が必要です。例とリンクは大歓迎です。

編集:コードを変更して使用可能にしました

4

1 に答える 1

3

動く

zos.closeEntry();

最も内側のループの外側。それ以外の場合は、各エントリの長さが1024バイト以下であると想定しています。

あなたのディレクトリがそのサイズの最初のエントリだと思います。


ところで、あなたも移動することができます

byte[] buffer = new byte[1024];

外側のループの前に移動するので、一度だけ作成されます。

于 2012-01-10T10:58:32.257 に答える