package com.java8.utils;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class ZipUtil {
public static void main(String[] args) throws Exception{
File zipFile = new File("E:\\递归压缩测试.zip") ;
ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFile)) ;
recursionZip("E:\\递归压缩测试","",zipOut);
zipOut.close() ;
}
public static void zipFile(File file,String baseDir,ZipOutputStream zipOut) throws Exception{
InputStream input = new FileInputStream(file) ;
//压缩出文件带目录,需要加上基础路径
zipOut.putNextEntry(new ZipEntry(baseDir + file.getName())) ;
byte[] buffer = new byte[4096];
int readByte = -1;
while((readByte=input.read(buffer))!=-1){
zipOut.write(buffer,0,readByte) ;
}
input.close() ;
zipOut.closeEntry();
}
/**
* 递归压缩文件夹
* @param filePath
*/
public static void recursionZip(String filePath,String baseDir,ZipOutputStream zipOut) throws Exception{
File srcFile = new File(filePath);
File[] files = srcFile.listFiles();
for(File file : files){
if(file.isFile()){
zipFile(file,baseDir,zipOut);
}else{
recursionZip(filePath + File.separator +file.getName(),baseDir + file.getName()+ File.separator,zipOut);
}
}
}
}
压缩前目录:
解压后目录: