В этом руководстве по Java рассматривается создание защищенных паролем zip-файлов с использованием очень полезной библиотеки zip4j. По умолчанию Java не поддерживает защиту файлов паролем; хотя у нее есть очень хорошая поддержка API для создания/ извлечения zip-файлов.
Есть и другие полезные библиотеки, которые так же хороши, а иногда и лучше, чем zip4j, но они также используют некоторый нативный код, что делает их использование в некоторой степени зависимым от платформы. Zip4j использует полностью код Java без какой-либо поддержки нативного кода, и это то, что делает его более подходящим для меня.
1. Библиотека Zip4j
1.1.Особенности
Zip4j предоставляет следующие возможности:
- Создание, добавление, извлечение, обновление, удаление файлов из Zip-файла
- Чтение/запись защищенных паролем ZIP-файлов
- Поддерживает шифрование AES 128/256
- Поддерживает стандартное шифрование ZIP
- Поддерживает формат Zip64
- Поддерживает методы сжатия Store(без сжатия) и Deflate
- Создание или извлечение файлов из разделенных Zip-файлов(например: z01, z02,…zip)
- Поддерживает имена файлов в кодировке Unicode
- Монитор прогресса
1.2 Зависимость
Загрузите последнюю версию зависимости maven для zip4j в проекте.
<dependency><groupId>net.lingala.zip4j</groupId><artifactId>zip4j</artifactId><version>2.10.0</version></dependency>
2. Создание защищенных паролем ZIP-файлов
Ниже приведен очень простой пример создания защищенного паролем zip-файла с использованием библиотеки. См. страницу Git для расширенных опций и дополнительных примеров.
import java.io.File;import java.util.ArrayList;import net.lingala.zip4j.core.ZipFile;import net.lingala.zip4j.exception.ZipException;import net.lingala.zip4j.model.ZipParameters;import net.lingala.zip4j.util.Zip4jConstants;public class CreatePasswordProtectedZipExample{public static void main(String[] args){try {//This is name and path of zip file to be createdZipFile zipFile = new ZipFile("C:/temp/test.zip");//Add files to be archived into zip fileArrayList<File> filesToAdd = new ArrayList<File>();filesToAdd.add(new File("C:/temp/test1.txt"));filesToAdd.add(new File("C:/temp/test2.txt"));//Initiate Zip Parameters which define various propertiesZipParameters parameters = new ZipParameters();parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE); // set compression method to deflate compression//DEFLATE_LEVEL_FASTEST - Lowest compression level but higher speed of compression//DEFLATE_LEVEL_FAST - Low compression level but higher speed of compression//DEFLATE_LEVEL_NORMAL - Optimal balance between compression level/speed//DEFLATE_LEVEL_MAXIMUM - High compression level with a compromise of speed//DEFLATE_LEVEL_ULTRA - Highest compression level but low speedparameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);//Set the encryption flag to trueparameters.setEncryptFiles(true);//Set the encryption method to AES Zip Encryptionparameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES);//AES_STRENGTH_128 - For both encryption and decryption//AES_STRENGTH_192 - For decryption only//AES_STRENGTH_256 - For both encryption and decryption//Key strength 192 cannot be used for encryption. But if a zip file already has a//file encrypted with key strength of 192, then Zip4j can decrypt this fileparameters.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256);//Set passwordparameters.setPassword("howtodoinjava");//Now add files to the zip filezipFile.addFiles(filesToAdd, parameters);}catch(ZipException e){e.printStackTrace();}}}