자바 ZIP 파일 압축 예제 (ZipOutputStream)

자바 ZIP 파일 압축 예제 (ZipOutputStream)


폴더와 파일을 변수에 담아주면, 해당 파일을 자바 ZIP으로 압축해주는 예제입니다. Java에서는 이미 라이브러리가 존재하기 때문에 구현하긴 꽤 쉽네요.


별도로 자바 ZIP을 이용하기 위한 설치 파일이나 설치용 3rd party 라이브러리는 필요 없어요.


우선, Oracle에서 제공하는 자바 플랫폼 문서를 참조합니다. SE 7 버전의 기반의 문서이나 다른 버전과의 차이는 없습니다. 무슨 뜻이냐면, 자바 버전 신경쓰지 말고 그냥 쓰세요.


많은 패키지들이 있는데 가장 기본적으로 사용하는 패키지는 위에서 표시한 부분들입니다.


ZipEntry

ZipOutputStream

ZipException


Package Java util - ZipEntry - ZipOutputStream ZipException


일단, 바이트 배열을 하나 생성합니다.


FileOutputStream 오브젝트로 경로와 ZIP 파일명을 결정하고, FileInputStream 오브젝트로 압축이 될 파일을 선택합니다.


실제 압축을 위해선, FileInputStream에서 지정된 파일을 바이트 배열로 분리하여 ZIP으로 재생성을 해야 하는데, 이를 돕는 메소드가 ZipOutputStream입니다.


이 메소드는 압축될 바이트를 하나씩 꺼내어 FileOutputStream으로 전달해 정상적으로 압축이 되도록 돕습니다. 소스는 복잡하지 않습니다. 이미 라이브러리가 지원되기 때문이죠.


자바 ZIP 압축 예제 1)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import  java.util.zip.ZipEntry;
import  java.util.zip.ZipException;
import  java.util.zip.ZipOutputStream;
 
public class  ZIPex{
    public static void  main(String args[])
    {         
        try 
        {
            String zipFile = "C:/example.zip";
            String sourceFile = "C:/target.txt";
 
            byte [] buffer = new byte [1024];
            
             FileOutputStream fout = new FileOutputStream(zipFile);
             ZipOutputStream zout = new ZipOutputStream(fout);
             FileInputStream fin = new FileInputStream(sourceFile);
             zout.putNextEntry(new ZipEntry(sourceFile));
 
             int length;
 
             while((length = fin.read(buffer)) > 0)
             {
                 zout.write(buffer, 0length);
             }
 
              zout.closeEntry();
              fin.close();
              zout.close();
              System.out.println("Zip file has been created!");
        }
        catch(IOException ioe)
        {
            System.out.println("IOException :" + ioe);
        }
    }
}
cs


코드에 조금 더 기교를 부리면 아래처럼 구현 할 수도 있죠.


자바 ZIP 압축 예제 2)


자바 ZIP 파일 압축 예제 (ZipOutputStream)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
ZipFile zipFile = new ZipFile(file);
 
try {
    Enumeration<extends ZipEntry> entries = zipFile.entries();
    
    while (entries.hasMoreElements()) {
        ZipEntry entry = entries.nextElement();
        File entryDestination = new File(outputDir,  entry.getName());
        
        if (entry.isDirectory())
            entryDestination.mkdirs();
        else {
            entryDestination.getParentFile().mkdirs();
            InputStream in = zipFile.getInputStream(entry);
            OutputStream out = new FileOutputStream(entryDestination);
            
            IOUtils.copy(inout);
            IOUtils.closeQuietly(in);
            
            out.close();
        }
    }
finally {
    zipFile.close();
}
cs


자바 ZIP 파일 압축 예제 (ZipOutputStream)

이 글을 공유하기

댓글(0)

Designed by JB FACTORY