기본 압축 방법 (압축파일내 폴더 미생성)
public void pack(List<String> zipFileList, String zipFilePath, String zipFileName) throws IOException {
log.info("------ zip pack start ------");
log.info("zipFileList.size() = {}", zipFileList.size());
log.info("zipFilePath = {}", zipFilePath);
log.info("zipFileName = {}", zipFileName);
// 압축 파일 디렉토리 생성
Path zipDir = Paths.get(zipFilePath);
Files.createDirectories(zipDir);
// 압축파일 생성
Path p = Files.createFile(Paths.get(zipFilePath + "/" + zipFileName));
// 압축파일내 파일 추가 작업
try (ZipOutputStream zs = new ZipOutputStream(Files.newOutputStream(p));){
zipFileList.forEach(filePath ->{
Path path = Paths.get(filePath);
if(!Files.isDirectory(path)){
log.info("to Zip file = {}", filePath);
// 압축파일내 파일 생성
// ZipEntity 내에 경로 입력시 압축해제시 경로가 그대로 생성된다.
ZipEntry zipEntry = new ZipEntry(path.getFileName().toString());
try {
zs.putNextEntry(zipEntry);
Files.copy(path, zs);
zs.closeEntry();
} catch (IOException e) {
System.err.println(e);
}
}
});
}
log.info("------ zip file end ------");
}
압축파일내 폴더 추가 방법
파일별 폴더 경로를 생성하기 위한 객체
@Getter
@Builder
public class ZipVO {
private String originFileFullPath;
private String zipInnerFolderPath;
}
압축 작업
public void packByZipVOList(List<ZipVO> zipVOList, String zipFilePath, String zipFileName) throws IOException {
log.info("------ zip pack start ------");
log.info("zipVOList.size() = {}", zipVOList.size());
log.info("zipFilePath = {}", zipFilePath);
log.info("zipFileName = {}", zipFileName);
Path zipDir = Paths.get(zipFilePath);
Files.createDirectories(zipDir);
Path p = Files.createFile(Paths.get(zipFilePath + "/" + zipFileName));
try (ZipOutputStream zs = new ZipOutputStream(Files.newOutputStream(p))){
zipVOList.forEach(zipVO ->{
Path path = Paths.get(zipVO.getOriginFileFullPath());
if(!Files.isDirectory(path)){
log.info("to Zip file = {}", zipVO.getOriginFileFullPath());
ZipEntry zipEntry = new ZipEntry((StringUtils.hasText(zipVO.getZipInnerFolderPath()) ? "/" + zipVO.getZipInnerFolderPath() : "") + "/" + path.getFileName());
try {
zs.putNextEntry(zipEntry);
Files.copy(path, zs);
zs.closeEntry();
} catch (IOException e) {
System.err.println(e);
}
}
});
}
log.info("------ zip file end ------");
}
테스트 코드로 실제 압축파일 생성 테스트
@Test
void packByZipVO() throws IOException {
String zipFilePath = "/Users/a/Downloads";
String zipFileName = "test.zip";
List<ZipVO> zipFileList = new ArrayList<>();
zipFileList.add(ZipVO.builder()
.originFileFullPath("/Users/a/Downloads/202305/202304/a.xlsx")
.zipInnerFolderPath("202304/1")
.build());
zipFileList.add(ZipVO.builder()
.originFileFullPath("/Users/a/Downloads/202305/202304/b.xlsx")
.zipInnerFolderPath(null)
.build());
zipFileList.add(ZipVO.builder()
.originFileFullPath("/Users/a/Downloads/202305/202304/c.xlsx")
.zipInnerFolderPath("202304")
.build());
zipFileList.add(ZipVO.builder()
.originFileFullPath("/Users/a/Downloads/202305/20230521/d.xlsx")
.zipInnerFolderPath("20230521/1")
.build());
zipFileList.add(ZipVO.builder()
.originFileFullPath("/Users/a/Downloads/202305/20230521/e.xlsx")
.zipInnerFolderPath(null)
.build());
packByZipVOList(zipFileList, zipFilePath, zipFileName);
}
생성 결과 (압축 해제)
'JAVA > JAVA' 카테고리의 다른 글
파일 거꾸로 읽기 (0) | 2023.05.26 |
---|---|
Default Method(인터페이스 디폴트 메소드) (0) | 2021.07.07 |
Equals 구현 (0) | 2021.03.22 |
1000단위 콤마 입력 (0) | 2021.03.09 |
이메일 마스킹 처리 (0) | 2021.03.09 |