java zip 目录_java 压缩目录为 zip

packagenet.blogjava.chenlb.zip;importjava.io.BufferedOutputStream;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.OutputStream;//import java.util.zip.ZipEntry;//import java.util.zip.ZipOutputStream;//用ant.jar的zip.*可以解决中文文件名问题importorg.apache.tools.zip.ZipEntry;importorg.apache.tools.zip.ZipOutputStream;/*** 压缩文件.

* 2007-10-17 下午11:19:50

*@authorchenlb*/publicclassRecursiveZip {publicstaticvoidmain(String[] args) {

RecursiveZip recursiveZip=newRecursiveZip();

System.out.println("====开始====");try{

OutputStream os=newFileOutputStream("e:/doc-recursive.zip");

BufferedOutputStream bs=newBufferedOutputStream(os);

ZipOutputStream zo=newZipOutputStream(bs);//recursiveZip.zip("e:/recursive-zip/中文文件名.txt", new File("e:/recursive-zip"), zo, true, true);recursiveZip.zip("e:/recursive-zip",newFile("e:/recursive-zip"), zo,true,true);

zo.closeEntry();

zo.close();

}catch(FileNotFoundException e) {

e.printStackTrace();

}catch(IOException e) {

e.printStackTrace();

}

System.out.println("====完成====");

}/***@parampath 要压缩的路径, 可以是目录, 也可以是文件.

*@parambasePath 如果path是目录,它一般为new File(path), 作用是:使输出的zip文件以此目录为根目录, 如果为null它只压缩文件, 不解压目录.

*@paramzo 压缩输出流

*@paramisRecursive 是否递归

*@paramisOutBlankDir 是否输出空目录, 要使输出空目录为true,同时baseFile不为null.

*@throwsIOException*/publicvoidzip(String path, File basePath, ZipOutputStream zo,booleanisRecursive,booleanisOutBlankDir)throwsIOException {

File inFile=newFile(path);

File[] files=newFile[0];if(inFile.isDirectory()) {//是目录files=inFile.listFiles();

}elseif(inFile.isFile()) {//是文件files=newFile[1];

files[0]=inFile;

}byte[] buf=newbyte[1024];intlen;//System.out.println("baseFile: "+baseFile.getPath());for(inti=0; i

String pathName="";if(basePath!=null) {if(basePath.isDirectory()) {

pathName=files[i].getPath().substring(basePath.getPath().length()+1);

}else{//文件pathName=files[i].getPath().substring(basePath.getParent().length()+1);

}

}else{

pathName=files[i].getName();

}

System.out.println(pathName);if(files[i].isDirectory()) {if(isOutBlankDir&&basePath!=null) {

zo.putNextEntry(newZipEntry(pathName+"/"));//可以使空目录也放进去}if(isRecursive) {//递归zip(files[i].getPath(), basePath, zo, isRecursive, isOutBlankDir);

}

}else{

FileInputStream fin=newFileInputStream(files[i]);

zo.putNextEntry(newZipEntry(pathName));while((len=fin.read(buf))>0) {

zo.write(buf,0,len);

}

fin.close();

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值