importjava.io.BufferedInputStream;importjava.io.BufferedOutputStream;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.nio.charset.Charset;importjava.util.zip.ZipEntry;importjava.util.zip.ZipInputStream;importjava.util.zip.ZipOutputStream;public classZipUtil {static int k = 1; //定义递归次数变量
public static voidmain(String[] args) {
compression("D:\\1111", "D:\\usr\\oracle\\weblogic\\user_projects\\domains\\spsj\\files\\spdbFolder\\T0\\HB11512900H000120161130001220112.zip");
decompression("D:\\usr\\oracle\\weblogic\\user_projects\\domains\\spsj\\files\\spdbFolder\\T0\\HB11512900H00012016113000122011.zip", "GBK", "D:\\1222");
}/***
* @Description (压缩)
*@throwsException*/
private static voidcompression(String inputFilePath, String outPutZip) {try{
String zipFileName=outPutZip;
File inputFile= newFile(inputFilePath);
System.out.println("压缩中...");
ZipOutputStream out= new ZipOutputStream(newFileOutputStream(
zipFileName));
BufferedOutputStream bo= newBufferedOutputStream(out);
zip(out, inputFile, inputFile.getName(), bo);
bo.close();
out.close();//输出流关闭
System.out.println("压缩完成");
}catch(Exception e) {
e.printStackTrace();
}
}private static void zip(ZipOutputStream out, File inputFile, String base, BufferedOutputStream bo) throws Exception { //方法重载
if(inputFile.isDirectory()) {
File[] fl=inputFile.listFiles();if (fl.length == 0) {
out.putNextEntry(new ZipEntry(base + "/")); //创建zip压缩进入点base
System.out.println(base + "/");
}for (int i = 0; i < fl.length; i++) {
zip(out, fl[i], base+ "/" + fl[i].getName(), bo); //递归遍历子文件夹
}
System.out.println("第" + k + "次递归");
k++;
}else{
out.putNextEntry(new ZipEntry(base)); //创建zip压缩进入点base
System.out.println(base);
FileInputStream in= newFileInputStream(inputFile);
BufferedInputStream bi= newBufferedInputStream(in);intb;while ((b = bi.read()) != -1) {
bo.write(b);//将字节流写入当前zip目录
}
bi.close();
in.close();//输入流关闭
}
}/***
* @Description (解压)
*@paramzipPath zip路径
*@paramcharset 编码
*@paramoutPutPath 输出路径*/
private static voiddecompression(String zipPath, String charset, String outPutPath) {long startTime=System.currentTimeMillis();try{
ZipInputStream Zin=new ZipInputStream(new FileInputStream(zipPath), Charset.forName(charset));//输入源zip路径
BufferedInputStream Bin=newBufferedInputStream(Zin);
String Parent= outPutPath; //输出路径(文件夹目录)
File Fout=null;
ZipEntry entry;try{while((entry = Zin.getNextEntry())!=null && !entry.isDirectory()){
Fout=newFile(Parent,entry.getName());if(!Fout.exists()){
(newFile(Fout.getParent())).mkdirs();
}
FileOutputStream out=newFileOutputStream(Fout);
BufferedOutputStream Bout=newBufferedOutputStream(out);intb;while((b=Bin.read())!=-1){
Bout.write(b);
}
Bout.close();
out.close();
System.out.println(Fout+"解压成功");
}
Bin.close();
Zin.close();
}catch(IOException e) {//TODO Auto-generated catch block
e.printStackTrace();
}
}catch(FileNotFoundException e) {//TODO Auto-generated catch block
e.printStackTrace();
}long endTime=System.currentTimeMillis();
System.out.println("耗费时间: "+(endTime-startTime)+" ms");
}
}