Thư viện java.util.zip của Java không cho phép dùng mật khẩu cho file zip, do đó ta có thể dùng thư viện zip4j
<dependency>
<groupId>net.lingala.zip4j</groupId>
<artifactId>zip4j</artifactId>
<version>2.11.5</version>
</dependency>
Ví dụ về dùng thư viện này như sau :
import net.lingala.zip4j.io.outputstream.ZipOutputStream; import net.lingala.zip4j.model.ZipParameters; import net.lingala.zip4j.model.enums.EncryptionMethod; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.Map; public class ZipFiles { public static void main(String[] args) { // zip single file zipSingleFile("singleFile.zip", "toan".toCharArray(), "file.txt", "test zip single file"); Map<String, String> filesMap = new HashMap<>(); filesMap.put("File1.txt", "test 1"); filesMap.put("File2.txt", "test 2"); // many files zip zipFiles("manyFiles.zip", "toan".toCharArray(), filesMap); } private static ZipParameters getZipParameters() { ZipParameters zipParameters = new ZipParameters(); zipParameters.setEncryptFiles(true); zipParameters.setEncryptionMethod(EncryptionMethod.AES); return zipParameters; } private static void zipFileEntry(ZipOutputStream zos, String fileName, String fileContent) throws IOException { ZipParameters zipParameters = getZipParameters(); zipParameters.setFileNameInZip(fileName); zos.putNextEntry(zipParameters); byte[] data = fileContent.getBytes(StandardCharsets.UTF_8); zos.write(data, 0, data.length); zos.closeEntry(); } private static void zipSingleFile(String zipFileName, char[] password, String fileName, String fileContent) { File file = new File(zipFileName); try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(file), password)) { zipFileEntry(zos, fileName, fileContent); System.out.println("path : " + file.getAbsolutePath()); } catch (IOException e) { System.out.println("error while zipping file " + zipFileName); } } private static void zipFiles(String zipFileName, char[] password, Map<String, String> filesMap) { File file = new File(zipFileName); try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(file), password)) { for (Map.Entry<String, String> entry : filesMap.entrySet()) { zipFileEntry(zos, entry.getKey(), entry.getValue()); } System.out.println("path : " + file.getAbsolutePath()); } catch (IOException e) { System.out.println("error while zipping file " + zipFileName); } } }
Không có nhận xét nào:
Đăng nhận xét