java 压缩文件目录_java实现文件及目录压缩

packageorg.alfresco.repo.bom.util;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importorg.apache.tools.zip.ZipEntry;importorg.apache.tools.zip.ZipOutputStream;/*** Compressor Util

*@authorHJ

**/

public classCompressorUtil {private static final String source = "F:/test"; //wait compressor source path

private static final String zipSource = "F:/chiang.zip"; //after compressor zip file path

private static long startTime;//compressor start system time

private static long endTime;//compressor end system time

public void compressor() throwsException{

startTime= System.currentTimeMillis();//record start compressor system time ,

boolean flag = false;//flag :true->compressor success

String baseDir = "";//defalut relative Dir , "" is gen Dir

File s= newFile(source);

File zs= new File(zipSource);//create zip file

if (zs.exists()) {//if this dir exists this zip file

zs.delete(); //delete this zip file ,

}

ZipOutputStream zos= null;try{

zos= new ZipOutputStream(newFileOutputStream(zs));

zos.setEncoding("GBK"); //solve Chinese garbled

startCompressor(baseDir, zos, s);

}catch(FileNotFoundException e) {//TODO Auto-generated catch block

e.printStackTrace();

}finally{if (zos!=null)

zos.close();

endTime=System.currentTimeMillis();

System.out.println("compressor success,use time:"+(endTime-startTime)+"ms");

}

}public void startCompressor(String baseDir,ZipOutputStream zos,File source) throwsException{if (source.isFile()) {//is file

toCompressedFile(baseDir, zos, source);

}if (source.isDirectory()) { //is dir

File[] sources = source.listFiles(); //get dir all files ( file or dir)

for(File f:sources){if (f.isFile()) {//is file

toCompressedFile(baseDir, zos, f);

}if (f.isDirectory()) {//is dir//if is dir , update baseDir value .

String newBaseDir = baseDir + f.getName() + "/";

createCompressedDir(baseDir, zos, f);//create dir and entry

startCompressor(newBaseDir, zos, f); //Re

}

}

}

}/*** add entry to zip file by stream way

*@parambaseDir

*@paramzos

*@paramf

*@throwsException*/

public void toCompressedFile(String baseDir,ZipOutputStream zos,File f) throwsException{

InputStream input= null;

ZipEntry z= new ZipEntry(baseDir+f.getName());try{

zos.putNextEntry(z);//add entry to zip file

input = newFileInputStream(f);int data = 0;while ((data=input.read())!=-1) {

zos.write(data);

}

}catch(IOException e) {//TODO Auto-generated catch block

e.printStackTrace();

}finally{if(input!=null)

input.close();

zos.closeEntry();

}

}/*** create compressed file dir and ZipEntry

*@parambaseDir

*@paramzos zip file's ZipOutputStream

*@paramf*/

public voidcreateCompressedDir(String baseDir,ZipOutputStream zos,File f){

ZipEntry z= new ZipEntry(baseDir+f.getName()+"/");try{

zos.putNextEntry(z);

zos.closeEntry();

}catch(IOException e) {//TODO Auto-generated catch block

e.printStackTrace();

}

}//test main method

public static void main(String[] args) throwsException{

CompressorUtil cu= newCompressorUtil();

cu.compressor();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值