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();
}
}
}
}