このパスワードで保護された 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
たが、まったく同じ例外がポップアップします。
手がかりはありますか?