총 게시물 22건, 최근 0 건 안내 RSS 글쓰기
이전글  목록 글쓰기
[소스코드]

ZipOutputStream을 이용한 파일 압출(콘솔)

글쓴이 : 그다지 날짜 : 2012-01-13 (금) 21:19 조회 : 9518
글주소 : http://www.androidside.com/B50/34
ZipCompress.class (4.9K), Down : 1, 2012-01-13 21:19:50
ZipCompress.java (5.8K), Down : 2, 2012-01-13 21:19:50
 
  한국소프트웨어기술진흥협회
JAVA,100%무료교육,우수SW기업취업연계, SW기술진흥,SW인재양성기관
edu.kosta.or.kr
  아이티뱅크 할인담당 박성민
KG아이티뱅크 신규학생 쿠폰할인 및 이벤트 안내, IT진로상담 예약접수
kgsitbank.kr/
  데브렉 자바마스터
JAVA, JSP, 스트럿츠, 스프링, MVC, 온라인 자바 동영상 교육과정.
www.devlec.com
신청하기


import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class ZipCompress {

    private static File outputFile;
    private static File thisFile;
   
    public static void main(String[] args){
        FileOutputStream fos = null;
        FileInputStream fis = null;
        ZipOutputStream zos = null;
        ZipEntry entry = null;
        int level = 8;

        System.out.println("ZipCompress v0.00000000001");
       
        if(args.length > 0){
           
            thisFile = new File(ZipCompress.class.getName() + ".class");
           
            ArrayList<String> filenames = new ArrayList<String>();
           
            int count = args.length;
            String state = "";
            boolean isFile = false;
            for(int i = 0; i < count; i++){
                if(args[i].contains("-")){
                    state = args[i];
                }else{
                    if(state.equalsIgnoreCase("-f")){
                        filenames.add(args[i]);
                        isFile = true;
                    }else if(state.equalsIgnoreCase("-l")){
                        try{
                            level = Integer.parseInt(args[i]);
                        }catch(NumberFormatException nfe){
                            System.out.println("Level is not number.");
                        }
                        level = level > 9 ? 9 : level;
                    }else if(state.equalsIgnoreCase("-o")){
                        outputFile = new File(args[i]);
                        String tempFileName = outputFile.getName();
                        int idx = 0;
                        while(outputFile.exists()){
                            outputFile = new File(idx + "_" + tempFileName);
                            idx++;
                        }               
                    }
                }
            }
           
            if(!isFile){
                System.out.println("File not found.");
                System.exit(0);
            }
           
            if(outputFile == null){
                outputFile = outputFile();
            }
           
            try{           
                fos = new FileOutputStream(outputFile);
                zos = new ZipOutputStream(fos);
                zos.setLevel(level);
               
                count = filenames.size();
                for(int i = 0; i < count; i++){
                    File file = new File(filenames.get(i));
                   
                    if(file.getCanonicalPath().equalsIgnoreCase(outputFile.getCanonicalPath())){continue;}
                    if(file.getCanonicalPath().equalsIgnoreCase(thisFile.getCanonicalPath())){continue;}
                   
                    if(file.isDirectory()){
                        directoryCompress(file, entry, zos, fis);
                    }else if(file.isFile()){
                        fis = new FileInputStream(file);
                       
                        entry = new ZipEntry(file.getPath());
                        zos.putNextEntry(entry);
                        byte [] buf = new byte[1024];
                        while(fis.read(buf) != -1){
                            zos.write(buf);                       
                        }
                        System.out.println(file.getPath() + " Compressed");
                        zos.closeEntry();
                        fis.close();
                    }else{
                        System.out.println(file.toString() + " not found file.");
                    }
                }
               
            } catch(Exception e) {
                e.printStackTrace();
                try {
                    zos.close();
                    fos.close();
                } catch (IOException e1) {
                    e.printStackTrace();
                    System.out.println("Fail Compressed");
                    System.exit(1);
                }
                System.out.println("Fail Compressed");
                System.exit(1);
            } finally{
                try {
                    zos.close();
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                    System.out.println("Fail Compressed");
                    System.exit(1);
                }
            }
            System.out.println("Success Compressed");
        }else{
            System.out.println("example : java ZipCompress -f *.* -l 8 -t test.zip");
            System.out.println("\t -f : Compress files");
            System.out.println("\t -o : Compressed file name");
            System.out.println("\t -l : Compressing level(default : 8, 1 ~ 9)");
        }
    }
   
    private static File outputFile(){
        File file = new File("Noname.zip");
        if(file.exists()){
            return outputFile(0);
        }
        return file;
    }
   
    private static File outputFile(int i){
        File file = new File("Noname_" + i + ".zip");
        if(file.exists()){
            return outputFile(i + 1);
        }
        return file;
    }
   
    private static void directoryCompress(File directory, ZipEntry entry, ZipOutputStream zos, FileInputStream fis){
        File[] files = directory.listFiles();
        int count = files.length;
       
        for(int i = 0; i < count; i++){
            if(files[i].isDirectory()){
                directoryCompress(files[i], entry, zos, fis);
            }else if(files[i].isFile()){
                try {
                    if(files[i].getCanonicalPath().equalsIgnoreCase(outputFile.getCanonicalPath())){continue;}
                    if(files[i].getCanonicalPath().equalsIgnoreCase(thisFile.getCanonicalPath())){continue;}
                   
                    fis = new FileInputStream(files[i]);
                    entry = new ZipEntry(files[i].getPath().replace("." + File.separator, ""));
                    zos.putNextEntry(entry);
                   
                    byte [] buf = new byte[1024];
                    while(fis.read(buf) != -1){
                        zos.write(buf);
                    }
                    System.out.println(files[i].getPath() + " Compressed");
                    zos.closeEntry();
                    fis.close();
                   
                } catch (FileNotFoundException e) {
                    System.out.println(files[i].toString() + " not found file.");
                    System.out.println("Fail Compressed");
                    System.exit(1);
//                    e.printStackTrace();
                } catch (IOException e) {
                    System.out.println(files[i].toString() + " IO Exception.");
                    System.out.println("Fail Compressed");
                    System.exit(1);
//                    e.printStackTrace();
                }
            }
        }
    }
}

괜히 한번 해보자고 해서 몇시간 뻘짓해서 만든 ZipOutputStream을 이용한 압축 소스입니다.





추천 버튼을 클릭하면 추천한 자와 추천받은 자 모두에게 포인트가 지급됩니다.

안사지킴이 2012-01-13 (금) 21:19
축하드립니다. ;)
그다지님은 럭키라이팅에 당첨되어 6 포인트 지급되었습니다.
카이로 2012-01-13 (금) 22:12
오호~~ 감사합니다. ^^
댓글주소
OSKIller 2012-01-16 (월) 13:57
굳굳~ 굳이에요~!!
댓글주소
덧없음 2012-01-17 (화) 09:39
저도 압축하는거 샘플코드 있을텐데! 잇힝!
댓글주소
조로산지 2012-01-18 (수) 12:05
감사합니다 ㅎㅎ
댓글주소
미니어스 2012-01-30 (월) 06:04
:%s/파일압출/파일압축/g
감사합니다. 
댓글주소
안대잉 2013-03-14 (목) 17:28
감사합니다.~
댓글주소
누구얌 2013-05-08 (수) 09:25
감사합니다 ^^
댓글주소
musickiller 2013-07-11 (목) 09:45
감사합니다 
댓글주소
나비가면 2015-11-26 (목) 09:45
감사합니다
댓글주소
철맨 2015-12-06 (일) 06:36
잘쓰겠습니당...
댓글주소
이전글  목록 글쓰기

총 게시물 22건, 최근 0 건 안내 RSS
번호 분류 제목 글쓴이 날짜 추천 비추천 조회
22 소스코드
간단하게 만들어 봤어요 학생이라 많이 부족하지만 실무자님들 조언 부탁드립니다. package lot; import java.util.Arr…
허브향 12-09 1 0 4329
21 TIP&TECH
comparator, ArrayList sort, 람다식을 이용한 컬렉션, 객체 비교/[Java]/[Android] / 2016.05.25. 최초 작성 원본 : http://blog.daum…
김병희라고요 05-25 0 0 4247
20 소스코드
어플리케이션 화면으로 리스트뷰를 이용해 gps데이터를 받기는 했는데 이걸 구글맵 지도에 표시하고 싶은데 어떻…
최문정 05-11 0 1 3656
19 소스코드
저희가 어플에 구글맵 지도에 현재위치까지 띄운 상태인데 근접경고 소스를 찾아보고 코딩을 해봤는데 토스트…
최문정 05-11 0 1 4266
18 소스코드
안녕하세요. 버튼의 위치때문에 계속 해매고 있는 바보입니다 ㅠ; 일단 최종적인 목표는 첫번째 사진을 2번째 …
RoundRob 05-08 0 1 4092
17 소스코드
안녕하세요. 컴포넌트들의 배치 방법에 대해서 질문 있습니다.    
RoundRob 05-07 0 1 3738
16 소스코드
안녕하세요. 자바 스윙관련해서 프로그램 만드는 도중에,  다른 소스파일에서는 JFrame 에 setTitle (" 할말") …
RoundRob 05-04 0 1 4326
15 강좌
데이터베이스를 만드는 간단한 방법은 Context 클래스에 정의된 openOrCreatDatabase() 메소드를 사용해서 데이트베이스…
이카루스031 05-09 4 0 6766
14 강좌
RPC(Remote Procedure Call)은 원격지 서버에 함수를 정의하고 로컬컴퓨터에서 그 함수를 호출하는 것이다. XML-RPC란 …
이카루스031 05-08 1 0 4808
13 강좌
안드로이드에서는 표준자바에서 사용하던 java.net 패키지의 클래스들을 그대로 사용할 수 있기 때문에 소켓으로 …
이카루스031 05-05 5 0 4971
12 강좌
애니메이션 대상과 액션을 지정하면 애니메이션 효과를 디스플레이 할 수 있는 방식. 트윈 애니메이션의 대상은…
이카루스031 05-05 2 0 5517
11 강좌
ImageView와 AnimationDrawable 그리기 객체를 이용해 애니메이션을 구현하는 방법과 AnimationDrawable 클래스로 정의되어 있…
이카루스031 05-05 0 0 6405
10 강좌
여러개의 이미지를 스레드를 이용해 화면에 디스플레이 하는 방법으로는 SurfaceView를 사용하는 방법도 있지만 …
이카루스031 05-04 1 0 4410
9 강좌
새로 만든 스레드에서 UI객체에 직접접근불가.. 핸들러를 사용하면 코드 복잡.. AsyncTask사용하면 백그라운드 작…
이카루스031 05-04 1 0 4402
8 소스코드
이클립스에 Guess 클래스를 만들고 실행시키면 됩니다.  //import java.util.Random; import java.util.Scanner; /**  *…
자설 04-24 0 0 8628
7 TIP&TECH
전자정부표준프레임워크에 Cubrid DB을 위한 DB connection poll 만들때, 기본으로 제공하는 커넥션풀을 사용하는 것보…
예민한인어 03-15 0 0 7258
6 강좌
자바가 미움 받는 15가지 이유     자바는 아주 유익한 언어이고, 안정과 편재를 위한 자바의 타입 검증…
카이로 10-15 11 0 11512
5 소스코드
Java Image Filters I have a large number of Java Image filters which are freely available for download from this site. The filters are all standard J…
카이로 04-03 6 0 10020
4 소스코드
import java.awt.Color; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import…
카이로 04-03 5 0 10980
3 소스코드
private void DeleteTheOldestFile(String strFolderPath) {  long nLastModifiedDate = 0;  File targetFile = null;    File[] arrF…
초봅니다요 11-28 4 0 9590
 1  2  맨끝
 


Copyright ⓒ www.androidside.com. All rights reserved.
채팅 권한: 글쓰기 1개
2레벨 이상만 대화 가능
공개 채팅: 평일 !(9시 ~ 17시),토,일
안사2 변경사항 보러가기 챗방이 잘 안보이면 크롬에서 접속해주세요
챗방 숨기기 |  챗방 보이기