8

JAVA で ZIP ファイルを開こうとしています。

以下のコードは、いくつかの大きなファイルを除いて正常に動作します。その場合、次の例外が発生します。

Exception in thread "main" java.util.zip.ZipException: invalid CEN header (bad signature)
at java.util.zip.ZipFile.open(Native Method)
at java.util.zip.ZipFile.<init>(ZipFile.java:114)
at java.util.zip.ZipFile.<init>(ZipFile.java:75)

既知のバグはありますか? JAVA でサポートされていない高い圧縮レベルが原因でしょうか?

Winzip を使用してファイルを解凍することはできず、Linux の gzip ではデータ長に関するエラーが発生することに注意してください (解凍されたファイルは約 80 GB です)。解凍するには、次の回避策を使用する必要がありました。

gunzip -S .zip < file.zip > file

どんなアイデアでも非常に役に立ちます。

コード:

if (file.getExtension().equals("gz")) {
  br = new BufferedReader(new InputStreamReader(new GZIPInputStream(new FileInputStream(name))));
}
else if (file.getExtension().equals("zip")) {
    ZipFile zipFile = new ZipFile(name); // <-------------------FAILS HERE
    Enumeration<? extends ZipEntry> entries = zipFile.entries();
    while (entries.hasMoreElements()) {
        ZipEntry zipEntry = entries.nextElement();
        System.out.println("ZIP File in the archive:" + zipEntry.getName());
        br = new BufferedReader(new InputStreamReader(zipFile.getInputStream(zipEntry)));
        break;
    }
}
4

1 に答える 1

7

Java 7(ZIP64をサポート)を使用していない場合、問題はJavaが古いZIP形式を使用しようとしていることである可能性があります

于 2012-04-10T21:00:40.943 に答える