Thứ Hai, 3 tháng 4, 2023

Zip file Java với mật khẩu dùng zip4j

 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