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

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

글쓴이 : 그다지 날짜 : 2012-01-13 (금) 21:19 조회 : 9283
글주소 : 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, 2018년 한국 소비자만족지수 1위, 고용노동부국비지원, 수강료조회
www.seoulgame.co.kr
  KGITBANK학원 김종수
상담예약접수처, 중고등학생수시대비, 대학전공, 국비지원취업, 정보보안전문가학원.
www.hrditbank.co.kr
  아마존 AWS 공식사이트
AWS 클라우드로 개발하는 JAVA, 유동적인 리소스 관리, 편리한 배포, 디버깅
aws.amazon.com/ko/
신청하기


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 4017
21 TIP&TECH
comparator, ArrayList sort, 람다식을 이용한 컬렉션, 객체 비교/[Java]/[Android] / 2016.05.25. 최초 작성 원본 : http://blog.daum…
김병희라고요 05-25 0 0 4006
20 소스코드
어플리케이션 화면으로 리스트뷰를 이용해 gps데이터를 받기는 했는데 이걸 구글맵 지도에 표시하고 싶은데 어떻…
최문정 05-11 0 1 3496
19 소스코드
저희가 어플에 구글맵 지도에 현재위치까지 띄운 상태인데 근접경고 소스를 찾아보고 코딩을 해봤는데 토스트…
최문정 05-11 0 1 4022
18 소스코드
안녕하세요. 버튼의 위치때문에 계속 해매고 있는 바보입니다 ㅠ; 일단 최종적인 목표는 첫번째 사진을 2번째 …
RoundRob 05-08 0 1 3899
17 소스코드
안녕하세요. 컴포넌트들의 배치 방법에 대해서 질문 있습니다.    
RoundRob 05-07 0 1 3578
16 소스코드
안녕하세요. 자바 스윙관련해서 프로그램 만드는 도중에,  다른 소스파일에서는 JFrame 에 setTitle (" 할말") …
RoundRob 05-04 0 1 4126
15 강좌
데이터베이스를 만드는 간단한 방법은 Context 클래스에 정의된 openOrCreatDatabase() 메소드를 사용해서 데이트베이스…
이카루스031 05-09 4 0 6561
14 강좌
RPC(Remote Procedure Call)은 원격지 서버에 함수를 정의하고 로컬컴퓨터에서 그 함수를 호출하는 것이다. XML-RPC란 …
이카루스031 05-08 1 0 4637
13 강좌
안드로이드에서는 표준자바에서 사용하던 java.net 패키지의 클래스들을 그대로 사용할 수 있기 때문에 소켓으로 …
이카루스031 05-05 5 0 4806
12 강좌
애니메이션 대상과 액션을 지정하면 애니메이션 효과를 디스플레이 할 수 있는 방식. 트윈 애니메이션의 대상은…
이카루스031 05-05 2 0 5306
11 강좌
ImageView와 AnimationDrawable 그리기 객체를 이용해 애니메이션을 구현하는 방법과 AnimationDrawable 클래스로 정의되어 있…
이카루스031 05-05 0 0 6218
10 강좌
여러개의 이미지를 스레드를 이용해 화면에 디스플레이 하는 방법으로는 SurfaceView를 사용하는 방법도 있지만 …
이카루스031 05-04 1 0 4279
9 강좌
새로 만든 스레드에서 UI객체에 직접접근불가.. 핸들러를 사용하면 코드 복잡.. AsyncTask사용하면 백그라운드 작…
이카루스031 05-04 1 0 4258
8 소스코드
이클립스에 Guess 클래스를 만들고 실행시키면 됩니다.  //import java.util.Random; import java.util.Scanner; /**  *…
자설 04-24 0 0 8359
7 TIP&TECH
전자정부표준프레임워크에 Cubrid DB을 위한 DB connection poll 만들때, 기본으로 제공하는 커넥션풀을 사용하는 것보…
예민한인어 03-15 0 0 7037
6 강좌
자바가 미움 받는 15가지 이유     자바는 아주 유익한 언어이고, 안정과 편재를 위한 자바의 타입 검증…
카이로 10-15 11 0 11217
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 9792
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 10755
3 소스코드
private void DeleteTheOldestFile(String strFolderPath) {  long nLastModifiedDate = 0;  File targetFile = null;    File[] arrF…
초봅니다요 11-28 4 0 9400
 1  2  맨끝
 


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