У меня есть этот защищенный паролем архив 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
, но появляется точно такое же исключение.
Есть какие-нибудь подсказки?