본문 바로가기

컴퓨터/노트북/인터넷

IT 컴퓨터 기기를 좋아하는 사람들의 모임방

조회 수 783 추천 수 0 댓글 0

단축키

Prev이전 문서

Next다음 문서

단축키

Prev이전 문서

Next다음 문서

Extra Form
import system.log.Logger;
import system.exception.Exception;
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
 
/**
* Created by IntelliJ IDEA.
* Date: 2006. 7. 6
* Time: 오후 3:48:11
* To change this template use File | Settings | File Templates.
* java.util.zip에 있는 놈을 쓰게 되면 압축할 때 한글명으로 된 파일은 깨져서 들어간다..
* 결국 그때문에 나중에 압축을 풀때 에러가 나게 된다...
* 해서 이놈을 jazzlib 라이브러리를 사용하여 해결하였다....
*/
public class compressTest {
static Logger logger = (Logger)Logger.getLogger();
static final int COMPRESSION_LEVEL = 8;
static final int BUFFER_SIZE = 64*1024;
 
public static void main(String[] args) throws IOException {
// 압축할 폴더를 설정한다.
String targetDir = "D:\test\testest";
// 현재 시간을 설정한다.
long beginTime = System.currentTimeMillis();
int cnt;
byte[] buffer = new byte[BUFFER_SIZE];
FileInputStream finput = null;
FileOutputStream foutput;
 
/*
**********************************************************************************
* java.util.zip.ZipOutputStream을 사용하면 압축시 한글 파일명은 깨지는 버그가
* 발생합니다.
* 이것은 나중에 그 압축 파일을 해제할 때 계속 한글 파일명이 깨는 에러가 됩니다.
* 현재 Sun의 공식 입장은 이 버그를 향후 수정할 계획이 없다고 하며
* 자체적으로 공식적 버그라고 인정하고 있지 않습니다.
* 이런 비영어권의 설움...ㅠ.ㅠ
* 해서 이 문제를 해결한 net.sf.jazzlib.ZipOutputStream을 추가하오니
* 이 라이브러리 사용을 권장하는 바입니다.
*********************************************************************************/
net.sf.jazzlib.ZipOutputStream zoutput;
 
/*
********************************************
* 압축할 폴더명을 얻는다. : 절대 경로가 넘어올 경우 --> 상대경로로 변경한다...
*********************************************/
targetDir.replace('\', File.separatorChar);
targetDir.replace('/', File.separatorChar);
String dirNm = targetDir.substring(targetDir.lastIndexOf(File.separatorChar)+1
, targetDir.length());
// 압축할 폴더를 파일 객체로 생성한다.
File file = new File(targetDir);
String filePath = file.getAbsolutePath();
logger.debug("File Path : " + file.getAbsolutePath());
 
/*
**************************************************************************
* 폴더인지 파일인지 확인한다...
* 만약 넘겨받은 인자가 파일이면 그 파일의 상위 디렉토리를 타겟으로 하여 압축한다.
*****************************************************************************/
if (file.isDirectory()) {
logger.debug("Directory.........");
} else {
file = new File(file.getParent());
}
// 폴더 안에 있는 파일들을 파일 배열 객체로 가져온다.
File[] fileArray = file.listFiles();
 
/*
*****************************************************************
* 압축할 파일 이름을 정한다.
* 압축할 파일 명이 존재한다면 다른 이름으로 파일명을 생성한다.
*****************************************************************/
String zfileNm = filePath + ".zip";
int num = 1;
while (new File(zfileNm).exists()) {
zfileNm = filePath + "_" + num++ + ".zip";
}
logger.debug("Zip File Path and Name : " + zfileNm);
// Zip 파일을 만든다.
File zfile = new File(zfileNm);
// Zip 파일 객체를 출력 스트림에 넣는다.
foutput = new FileOutputStream(zfile);
// 집출력 스트림에 집파일을 넣는다.
zoutput = new net.sf.jazzlib.ZipOutputStream((OutputStream)foutput);
net.sf.jazzlib.ZipEntry zentry = null;
 
try {
for (int i=0; i < fileArray.length; i++) {
// 압축할 파일 배열 중 하나를 꺼내서 입력 스트림에 넣는다.
finput = new FileInputStream(fileArray[i]);
// ze = new net.sf.jazzlib.ZipEntry ( inFile[i].getName());
zentry = new net.sf.jazzlib.ZipEntry(fileArray[i].getName());
logger.debug("Target File Name for Compression : "
+ fileArray[i].getName()
+ ", File Size : "
+ finput.available());
zoutput.putNextEntry(zentry);
 
/*
****************************************************************
* 압축 레벨을 정하는것인데 9는 가장 높은 압축률을 나타냅니다.
* 그 대신 속도는 젤 느립니다. 디폴트는 8입니다.
*****************************************************************/
zoutput.setLevel(COMPRESSION_LEVEL);
cnt = 0;
while ((cnt = finput.read(buffer)) != -1) {
zoutput.write(buffer, 0, cnt);
}
finput.close();
zoutput.closeEntry();
}
zoutput.close();
foutput.close();
} catch (Exception e) {
logger.fatal("Compression Error : " + e.toString());
/*
**********************************************
* 압축이 실패했을 경우 압축 파일을 삭제한다.
***********************************************/
logger.error(zfile.toString() + " : 압축이 실패하여 파일을 삭제합니다...");
if (!zfile.delete()) {
logger.error(zfile.toString() + " : 파일 삭제가 실패하여 다시 삭제합니다...");
while(!zfile.delete()) {
logger.error(zfile.toString() + " : 삭제가 실패하여 다시 삭제합니다....");
}
}
e.printStackTrace();
throw new Exception(e);
} finally {
if (finput != null) {
finput.close();
}
if (zoutput != null) {
zoutput.close();
}
if (foutput != null) {
foutput.close();
}
}
long msec = System.currentTimeMillis() - beginTime;
logger.debug("Check :: >> " + msec/1000 + "." + (msec % 1000) + " sec. elapsed...");
}
}

컴퓨터/노트북/인터넷

IT 컴퓨터 기기를 좋아하는 사람들의 모임방

List of Articles
번호 분류 제목 조회 수 날짜
공지 뉴스 구글 최신 뉴스 file 1384 2024.12.12
HOT글 일반 아 진짜 요새 SKT 해킹 뭐시기 때문에 신경 쓰여 죽겠어 ㅠㅠ 2 236 2025.05.20
공지 사랑LOVE 포인트 만렙! 도전 4651 2025.03.19
공지 🚨(뉴비필독) 전체공지 & 포인트안내 2 25846 2024.11.04
공지 URL만 붙여넣으면 끝! 임베드 기능 20431 2025.01.21
10640 네이버 지식쇼핑을 보면 깜놀랄일 3950 2014.03.23
10639 mysql 6.0 다운로드 (windows 계열 32비트용) 2784 2014.03.29
10638 리니지 프리서버 - 춘자 2.7클라이언트 2 9501 2014.03.30
10637 안녕하세요 1924 2014.04.07
10636 가입했습니당^.^ 1 2187 2014.04.07
10635 가입인사드립니다. 1 2123 2014.04.07
10634 스위트망고입니다. 반갑습니다 1 2194 2014.04.07
10633 영자님 2 4000 2014.04.11
10632 카오스원 2 3276 2014.04.11
10631 컴퓨터 포멧하려는데 BIOS 화면이 안떠요. 6 5184 2014.04.12
10630 하이하이 1 4141 2014.04.12
10629 영자씨 1 2621 2014.04.13
10628 인텔 v프로 원격제어 지원 메인보드-애즈락 Q87M 프로 출시 2849 2014.04.26
10627 하즈웰 4세대 오버클럭시 온도차이. 2377 2014.04.26
10626 갠적으로 마음에 드는 그래픽카드 GTX760 PHANTOM DDR5 2G 1 2840 2014.04.26
10625 탑파워 TOPOWER TOP-500D 80PLUS Bronze 1939 2014.04.26
10624 슈퍼플라워 SF-500P12A 후기 1711 2014.04.26
10623 인텔 코어 i7 하스웰 4770 추천드림 2423 2014.04.26
10622 듀얼 모니터 작업표시줄 프로그램 2974 2014.04.26
10621 일반하드랑 ssd랑 차이가 심한가요? 1 3033 2014.04.26
10620 로지텍 Gaming Mouse G100 쓰다보니 2198 2014.04.26
10619 AMD FX 8300 비쉐라는 인텔 cpu 어느것과 동급인가요? 1 4268 2014.04.26
10618 인텔 G3220 하스웰- 부모님 조립해드렸어요 2420 2014.04.26
10617 인텔 제온 E3-1230V3, 제온짝퉁이라니? 2632 2014.04.26
10616 ipTIME Extender2 무선공유기 wifi 확장써보니...안습 2322 2014.04.26
10615 안철수 v3백신도 좋지만, avast가 더 좋은것 같아요 2486 2014.04.27
10614 컴퓨터가 아무래도 연차가 있다보니.. 1 3409 2014.04.27
10613 그외 컴퓨터 온도측정 프로그램 hwmonitor 3775 2014.04.28
10612 이용하는 사람이 별로 없나바요. 3 3509 2014.04.28
10611 안녕하세요^^ 이번에 PC 새로 맞추려는데 1 2333 2014.04.28
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 355 Next
/ 355