Из документации Apache Common-Compress:
Обратите внимание, что Commons Compress в настоящее время поддерживает только подмножество алгоритмов сжатия и шифрования, используемых для архивов 7z.Для записи только несжатых записей поддерживаются LZMA, LZMA2, BZIP2 и Deflate - в дополнение к этим чтениям поддерживаются AES-256 / SHA-256 и DEFLATE64.
Если вы используете common-compress, вы, вероятно,не должно быть проблем с переносимостью вашего кода, так как вам не нужно встраивать нативные библиотеки.
В приведенном ниже коде показано, как перебирать файлы в 7zip-архиве и печатать его содержимое на стандартный вывод.Вы можете адаптировать его к требованиям AES:
public static void showContent(String archiveFilename) throws IOException {
if (archiveFilename == null) {
return;
}
try (SevenZFile sevenZFile = new SevenZFile(new File(archiveFilename))) {
SevenZArchiveEntry entry = sevenZFile.getNextEntry();
while (entry != null) {
final byte[] contents = new byte[(int) entry.getSize()];
int off = 0;
while ((off < contents.length)) {
final int bytesRead = sevenZFile.read(contents, off, contents.length - off);
off += bytesRead;
}
System.out.println(new String(contents, "UTF-8"));
entry = sevenZFile.getNextEntry();
}
}
}
Используемый импорт:
import java.io.File;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import org.apache.commons.compress.archivers.sevenz.SevenZArchiveEntry;
import org.apache.commons.compress.archivers.sevenz.SevenZFile;
Используемые зависимости Maven:
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-compress -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
<version>1.18</version>
</dependency>
<dependency>
<groupId>org.tukaani</groupId>
<artifactId>xz</artifactId>
<version>1.6</version>
</dependency>
Обратите внимание: org.tukaani: xzтребуется только для 7zip.Зависимости общего сжатия не нужны для других поддерживаемых форматов сжатия.