1. Обзор
В предыдущем уроке мы показали, как архивировать и распаковывать в Java с помощью пакета java.util.zip
. Но у нас нет стандартной библиотеки Java для создания защищенных паролем zip-файлов.
В этом руководстве мы узнаем, как создавать защищенные паролем zip-файлы и распаковывать их с помощью библиотеки Zip4j . Это наиболее полная библиотека Java для zip-файлов.
2. Зависимости
Начнем с добавления зависимости zip4j
в наш файл pom.xml
:
<dependency>
<groupId>net.lingala.zip4j</groupId>
<artifactId>zip4j</artifactId>
<version>2.9.0</version>
</dependency>
3. Заархивируйте файл
Во- первых, мы воспользуемся методом ZipFile addFile()
, чтобы заархивировать файл с именем aFile.txt
в защищенный паролем архив с именем compress.zip
:
ZipParameters zipParameters = new ZipParameters();
zipParameters.setEncryptFiles(true);
zipParameters.setCompressionLevel(CompressionLevel.HIGHER);
zipParameters.setEncryptionMethod(EncryptionMethod.AES);
ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray());
zipFile.addFile(new File("aFile.txt"), zipParameters);
Строка setCompressionLevel
является необязательной. Мы можем выбрать уровень от САМОГО БЫСТРОГО
до УЛЬТРА
(по умолчанию НОРМАЛЬНЫЙ
).
В этом примере мы использовали шифрование AES. Если мы хотим использовать стандартное шифрование Zip, мы просто заменяем AES
на ZIP_STANDARD
.
Обратите внимание, что если файл «aFile.txt» не существует на диске, метод выдаст исключение: «net.lingala.zip4j.exception.ZipException: файл не существует: …»
Чтобы исправить это, мы должны убедиться, что файл либо создан вручную и помещен в папку проекта, либо мы должны создать его из Java:
File fileToAdd = new File("aFile.txt");
if (!fileToAdd.exists()) {
fileToAdd.createNewFile();
}
Кроме того, после того, как мы закончим с новым ZipFile
, рекомендуется закрыть ресурс:
zipFile.close();
4. Заархивируйте несколько файлов
Давайте немного изменим код, чтобы мы могли сжимать сразу несколько файлов:
ZipParameters zipParameters = new ZipParameters();
zipParameters.setEncryptFiles(true);
zipParameters.setEncryptionMethod(EncryptionMethod.AES);
List<File> filesToAdd = Arrays.asList(
new File("aFile.txt"),
new File("bFile.txt")
);
ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray());
zipFile.addFiles(filesToAdd, zipParameters);
Вместо использования метода addFile
мы используем addFiles()
и передаем список
файлов.
5. Заархивируйте каталог
Мы можем заархивировать папку, просто заменив метод addFile на
addFolder
:
ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray());
zipFile.addFolder(new File("/users/folder_to_add"), zipParameters);
6. Создание разделенного ZIP-файла
Мы можем разделить zip-файл на несколько файлов, когда размер превышает определенный предел , используя методы createSplitZipFile
и createSplitZipFileFromFolder
:
ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray());
int splitLength = 1024 * 1024 * 10; //10MB
zipFile.createSplitZipFile(Arrays.asList(new File("aFile.txt")), zipParameters, true, splitLength);
zipFile.createSplitZipFileFromFolder(new File("/users/folder_to_add"), zipParameters, true, splitLength);
Единицей измерения splitLength
являются байты.
7. Извлечение всех файлов
Извлечение файлов так же просто. Мы можем извлечь все файлы из нашего сжатого.zip
с помощью метода extractAll()
:
ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray());
zipFile.extractAll("/destination_directory");
8. Извлечение одного файла
И если мы просто хотим извлечь один файл из сжатого.zip
, мы можем использовать метод extractFile()
:
ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray());
zipFile.extractFile("aFile.txt", "/destination_directory");
9. Заключение
Таким образом, мы научились создавать защищенные паролем zip-файлы и распаковывать их на Java с помощью библиотеки Zip4j.
Реализацию этих примеров можно найти на GitHub .