1

サーバーからzipファイルを抽出しようとしています(zipファイルはサーバーにあります。FTP経由で抽出しようとしています)。このコードを使用しています。

  byte[] buf = new byte[1024];

    ZipInputStream zinstream = new ZipInputStream(Home.ftpClient.retrieveFileStream("HO2BR.br.3162675983055490721.zync"));
    ZipEntry zentry = zinstream.getNextEntry();
    System.out.println("Name of current Zip Entry : " + zentry + "\n");
    while (zentry != null) {
        String entryName = zentry.getName();
        System.out.println("Name of  Zip Entry : " + entryName);
        FileOutputStream outstream = new FileOutputStream(entryName);
        int n;

        while ((n = zinstream.read(buf, 0, 1024)) > -1) {
            outstream.write(buf, 0, n);

        }
        System.out.println("Successfully Extracted File Name : " + entryName);
        outstream.close();

        zinstream.closeEntry();
        zentry = zinstream.getNextEntry();
    }
    zinstream.close();

}

ZipInputStream(Home.ftpClient.retrieveFileStream( "HO2BR.br.3162675983055490721.zync")); 入力ストリームにFTPClient のretrieveFileStreamを割り当てます

プログラムの実行中にこのエラーが発生しました

java.util.zip.ZipException:java.util.zip.InflaterInputStream.read(InflaterInputStream.java:164)で無効な距離が遠すぎます

この例外を解決するにはどうすればよいですか?

4

2 に答える 2

2

ほとんどの場合、ftpClient.retrieveFileStreamはシークをサポートしていません。Zipの「目次」エントリはファイルの最後にあります。したがって、最初のアイテムを「開く」には、そのアイテムを読み取るためにファイルの先頭にバックアップする機能が必要です。

zipファイルをローカルファイルにダウンロードし、そこからコンテンツを抽出する必要があります。

于 2013-02-16T04:26:15.700 に答える
1

解決策は、転送モードをからに変更することASCIIですBINARY

于 2018-06-25T22:13:09.127 に答える