JAVA : zip 압축하기 (압축파일 암호설정)
in Java
암호가 걸린 zip 파일을 맹글기 위해 zip4j 를 사용했다.
maven dependency
<dependency>
<groupId>net.lingala.zip4j</groupId>
<artifactId>zip4j</artifactId>
<version>1.3.3</version>
</dependency>
Zipper.java
package io.github.stove99.util;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
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 Zipper {
private List<File> files = new ArrayList<>();
/**
* 압축할 파일 추가
*/
public Zipper add(String file) {
return add(new File(file));
}
public Zipper add(File file) {
if (file == null || !file.exists())
throw new RuntimeException("파일이 존재하지 않습니다.");
files.add(file);
return this;
}
/**
* 압축하기
*
* @param to 생성할 압축파일
* @throws ZipException
*/
public void zip(String to) throws ZipException {
this.zip(to, null);
}
/**
* 비밀번호 걸어서 압축하기
*
* @param to 생성할 압축파일
* @param password 압축파일 암호
* @throws ZipException
*/
public void zip(String to, String password) throws ZipException {
ZipParameters param = new ZipParameters();
param.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
param.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_ULTRA);
if (password != null) {
param.setEncryptFiles(true);
param.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES);
param.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256);
param.setPassword(password);
}
ZipFile zipFile = new ZipFile(to);
if (files.size() == 0) {
throw new RuntimeException("압축대상 파일이 없습니다.");
}
files.forEach(file -> {
try {
if (file.isFile()) {
zipFile.addFile(file, param);
} else {
zipFile.addFolder(file, param);
}
} catch (ZipException e) {
e.printStackTrace();
}
});
}
/**
* 압축풀기
*
* @param file
* @param password
* @throws ZipException
*/
public void unzip(String file, String password) throws ZipException {
File f = new File(file);
ZipFile zipFile = new ZipFile(f);
if (zipFile.isEncrypted()) {
zipFile.setPassword(password);
}
zipFile.extractAll(f.getParent());
}
public void unzip(String file) throws ZipException {
this.unzip(file, null);
}
}
Zipper 사용법
Zipper zipper = new Zipper();
// 암호를 1234qwer 로 해서 압축함
zipper.add("d:\\tmp").add("d:\\other\\스크립.txt").zip("d:\\압축.zip", "1234qwer");
Zipper zipper = new Zipper();
// 암호없이 압축함
zipper.add("d:\\tmp").add("d:\\other\\스크립.txt").zip("d:\\압축.zip");