반응형
(아파치 라이브러리를 사용한 파일 압축)
위 파란글씨를 통해 다운받는 공식 홈페이지로 이동합니다.
소스에도 주석을 달아놔서 블로그에 자세한 설명을 적지않아도 왠만한 개발자면 이해가 되실거라고 믿습니다.
이 소스를 자바 프로젝트에서 사용한다면 util 패키지 내부에 compress 클래스에 넣어놓고 재활용해서 사용하는게 좋겠죠 !
그럼 어차피 위에 글은 안읽어보고 소스만 복사+붙여넣기 하시겠지만
소스 공개합니다 !
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;
import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
import java.io.*;
/**
* 본 클래스는 압축하는데 필요한 소스이며, 압축과 압축해제를 동시에 다루는 클래스이다.
* @author jskang
*/
public class Compress {
private String[] fileList = null;
int SIZE = 1024;
/**
* 압축 메소드
* @param dirPath 압축할 파일이 모여있는 디렉토리 경로 (디렉토리안에있는 모든 파일 및 디렉토리를 압축함)
* @param outPath 압축파일을 생성할 디렉토리 경로
* @author jskang
*/
public void compress(String dirPath, String outPath){
File file = new File(dirPath);
if(!file.isDirectory()) {
System.out.println("It is not directory.");
return;
} else if(file == null){
System.out.println("File not found.");
return;
}
fileList = file.list();
byte[] buf = new byte[SIZE];
String outCompressName = outPath+ "/compress.zip";
FileInputStream fis = null;
ZipArchiveOutputStream zos = null;
BufferedInputStream bis = null;
try {
// Zip 파일생성
zos = new ZipArchiveOutputStream(new BufferedOutputStream(new FileOutputStream(outCompressName)));
for( int i=0; i < fileList.length; i++ ){
//해당 폴더안에 다른 폴더가 있다면 지나간다.
if( new File(dirPath+"/"+fileList[i]).isDirectory() ){
continue;
}
//encoding 설정
zos.setEncoding("UTF-8");
//buffer에 해당파일의 stream을 입력한다.
fis = new FileInputStream(dirPath + "/" + fileList[i]);
bis = new BufferedInputStream(fis,SIZE);
//zip에 넣을 다음 entry 를 가져온다.
zos.putArchiveEntry(new ZipArchiveEntry(fileList[i]));
//준비된 버퍼에서 집출력스트림으로 write 한다.
int len;
while((len = bis.read(buf,0,SIZE)) != -1){
zos.write(buf,0,len);
}
bis.close();
fis.close();
zos.closeArchiveEntry();
}
zos.close();
} catch(IOException e){
e.printStackTrace();
} finally{
try {
if (zos != null) {
zos.close();
}
if (fis != null) {
fis.close();
}
if (bis != null) {
bis.close();
}
} catch(IOException e){
e.printStackTrace();
}
}
}
}
반응형
'백앤드 > Java' 카테고리의 다른 글
[JAVA] SpringBoot 서비스 시작 포트 변경하기 (0) | 2021.10.12 |
---|---|
[JAVA] 프로덕션용 OpenJDK 설치하기 (0) | 2020.09.21 |
[JAVA] OpenJDK8 설치하기 (0) | 2018.10.21 |
[JAVA] JSON 파일을 Map에 넣기 (1) | 2018.10.16 |
[JAVA] Path 클래스로 경로 리턴받기 (0) | 2018.10.10 |