package others;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.zip.Adler32;
import java.util.zip.CheckedOutputStream;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;
public class Zip {
/**
* 中文条件下文件(夹)压缩
*
*/
public static void zipCompress(String src,String des)
throws IOException{
ZipOutputStream out=null;
try {
CheckedOutputStream cusm=
new CheckedOutputStream(new FileOutputStream(des),new Adler32());
out=new ZipOutputStream(new BufferedOutputStream(cusm));
fileZip(new File(src),out,"");
}finally{
if(out!=null){
out.close();
}
}
}
private static void fileZip(File file, ZipOutputStream out,
String base) throws IOException{
if(file.isFile()){
if(base.length()>0){
out.putNextEntry(new ZipEntry(base));
}else{
out.putNextEntry(new ZipEntry(file.getName()));
}
BufferedReader in=new BufferedReader(
new InputStreamReader(new FileInputStream(file),"ISO8859_1"));
int c;
while((c=in.read())!=-1){
out.write(c);
}
in.close();
}else if(file.isDirectory()){
File[] subFiles=file.listFiles();
out.putNextEntry(new ZipEntry(base+File.separator));
base=base.length()!=0?base+File.separator:"";
for(File subFile:subFiles){
fileZip(subFile,out,base+subFile.getName());
}
}
}
public static void main(String[] args) {
/*需要压缩的源文件夹路径*/
String folderSrcPath="E://123";
/*压缩后的zip文件及其存放位置*/
String forderDesPath="E://压缩文件.zip";
try {
Zip.zipCompress(folderSrcPath,forderDesPath);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("完成压缩");
}
}
说明:1、需要引入jar包
2,、当被压缩的文件夹比较大时,会很慢的,耗时较多
参考:http://blog.csdn.net/gaoyusi4964238/article/details/4948151