packagecom.m2plat.puhui.utils;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;import java.io.*;importjava.util.zip.ZipEntry;importjava.util.zip.ZipOutputStream;/*** 文件压缩工具类
* Created by xiangzh on 2018/11/20.*/
public classZipUtils {private static Logger logger = LoggerFactory.getLogger(ZipUtils.class);privateZipUtils(){
}public static void doCompress(String srcFile, String zipFile) throwsIOException {
doCompress(new File(srcFile), newFile(zipFile));
}/*** 文件压缩
*@paramsrcFile 目录或者单个文件
*@paramzipFile 压缩后的ZIP文件*/
public static void doCompress(File srcFile, File zipFile) throwsIOException {
ZipOutputStream out= null;try{
out= new ZipOutputStream(newFileOutputStream(zipFile));
doCompress(srcFile, out);
}catch(Exception e) {throwe;
}finally{
out.close();//记得关闭资源
}
}public static void doCompress(String filelName, ZipOutputStream out) throwsIOException{
doCompress(newFile(filelName), out);
}public static void doCompress(File file, ZipOutputStream out) throwsIOException{
doCompress(file, out,"");
}public static void doCompress(File inFile, ZipOutputStream out, String dir) throwsIOException {if( inFile.isDirectory() ) {
File[] files=inFile.listFiles();if (files!=null && files.length>0) {for(File file : files) {
String name=inFile.getName();if (!"".equals(dir)) {
name= dir + "/" +name;
}
ZipUtils.doCompress(file, out, name);
}
}
}else{
ZipUtils.doZip(inFile, out, dir);
}
}public static void doZip(File inFile, ZipOutputStream out, String dir) throwsIOException {
String entryName= null;if (!"".equals(dir)) {
entryName= dir + "/" +inFile.getName();
}else{
entryName=inFile.getName();
}
ZipEntry entry= newZipEntry(entryName);
out.putNextEntry(entry);int len = 0;byte[] buffer = new byte[1024];
FileInputStream fis= newFileInputStream(inFile);while ((len = fis.read(buffer)) > 0) {
out.write(buffer,0, len);
out.flush();
}
out.closeEntry();
fis.close();
}public static void doZip(InputStream in ,ZipOutputStream out, String entryName) throwsIOException {
logger.info("---添加InputStream到压缩文件,InputStream大小:{}",in.available());
ZipEntry entry= newZipEntry(entryName);
out.putNextEntry(entry);int len = 0;byte[] buffer = new byte[1024*5];while ((len = in.read(buffer)) > 0) {
out.write(buffer,0, len);
out.flush();
}
out.closeEntry();
in.close();
}public static void main(String[] args) throwsIOException {
doCompress("D:/excel/puhui/1", "D:/附件.zip");
}
}