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