1

このパスワードで保護された 7z アーカイブは、7z だけで適切に開いて抽出できます。ただし、以下のコードを使用します。

    byte[] PASSWORD = "secret".getBytes();
    String fileName = "r:/txt.7z";
    SevenZArchiveEntry entry;
    try (SevenZFile arch = new SevenZFile(new File(fileName), PASSWORD)) {
        while ((entry = arch.getNextEntry()) != null) {
            System.out.println(entry.getName());
        }
//      for (var e : arch.getEntries()) {
//          System.out.println(e.getName());
//      }
    }

この例外が発生します:

Exception in thread "main" java.io.IOException: Stream is not in the BZip2 format
  at org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream.init(BZip2CompressorInputStream.java:252)
  at org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream.<init>(BZip2CompressorInputStream.java:134)
  at org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream.<init>(BZip2CompressorInputStream.java:112)
  at org.apache.commons.compress.archivers.sevenz.Coders$BZIP2Decoder.decode(Coders.java:254)
  at org.apache.commons.compress.archivers.sevenz.Coders.addDecoder(Coders.java:79)
  at org.apache.commons.compress.archivers.sevenz.SevenZFile.buildDecoderStack(SevenZFile.java:933)
  at org.apache.commons.compress.archivers.sevenz.SevenZFile.buildDecodingStream(SevenZFile.java:909)
  at org.apache.commons.compress.archivers.sevenz.SevenZFile.getNextEntry(SevenZFile.java:222)

forループのコメントを外してループをコメントアウトするとwhile、実際にはアーカイブに(唯一の)ファイル名が出力されることに注意してください。これgetNextEntryは、BZip2 形式に関する例外をトリガーすることです。

この問題に関するバグレポートは見つかりませんでした。もちろん、パスワードが間違っている可能性があると思ったので、結果を確認するためにそれをゴミに変更しましたが、メッセージに提案があり、おそらくパスワードが間違っているという別の例外が発生します。したがって、パスワードは間違いなく正しいようですが、ファイルを解凍できません。

クラスパスに xz-1.8.jar (org.tukaani.xz) もあります。

SevenZFileでコンストラクターも試しましSeekableByteBufferたが、まったく同じ例外がポップアップします。

手がかりはありますか?

4

1 に答える 1