package com.kexin.locatorService.utils;
import com.kexin.locatorService.pojo.Assets;
import org.apache.commons.lang.StringUtils;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;/**
* @ProjectName: iot
* @Package: com.kexin.locatorService.utils
* @ClassName: ZipMultiFileUtil
* @Author: luqiming
* @Description:
* @Date: 2020/12/29 16:17
* @Version: 1.0*/
public classZipMultiFileUtil {public static voidzipFiles(File[] srcFiles, File zipFile) {try{if (srcFiles.length != 0) {//判断压缩后的文件存在不,不存在则创建
if (!zipFile.exists()) {
zipFile.createNewFile();
}else{
zipFile.delete();
zipFile.createNewFile();
}//创建 FileInputStream 对象
FileInputStream fileInputStream = null;//实例化 FileOutputStream 对象
FileOutputStream fileOutputStream = newFileOutputStream(zipFile);//实例化 ZipOutputStream 对象
ZipOutputStream zipOutputStream = newZipOutputStream(fileOutputStream);//创建 ZipEntry 对象
ZipEntry zipEntry = null;//遍历源文件数组
for (int i = 0; i < srcFiles.length; i++) {//将源文件数组中的当前文件读入 FileInputStream 流中
fileInputStream = newFileInputStream(srcFiles[i]);//实例化 ZipEntry 对象,源文件数组中的当前文件
zipEntry = newZipEntry(srcFiles[i].getName());
zipOutputStream.putNextEntry(zipEntry);//该变量记录每次真正读的字节个数
intlen;//定义每次读取的字节数组
byte[] buffer = new byte[1024];while ((len = fileInputStream.read(buffer)) > 0) {
zipOutputStream.write(buffer,0, len);
}
}
zipOutputStream.closeEntry();
zipOutputStream.close();
fileInputStream.close();
fileOutputStream.close();
}
}catch(Exception e) {
e.printStackTrace();
}
}/**
* 将存放在sourceFilePath目录下的源文件,打包成fileName名称的zip文件,并存放到zipFilePath路径下
*
* @param sourceFilePath :待压缩的文件路径
* @param zipFilePath :压缩后存放路径
* @param fileName :压缩后文件的名称
* @return*/
public staticboolean fileToZip(String sourceFilePath, String zipFilePath, String fileName) {
boolean flag= false;
File sourceFile= newFile(sourceFilePath);
FileInputStream fis= null;
BufferedInputStream bis= null;
FileOutputStream fos= null;
ZipOutputStream zos= null;if (sourceFile.exists() == false) {
System.out.println("待压缩的文件目录:" + sourceFilePath + "不存在");
sourceFile.mkdir();//新建目录
}try{
File zipFile= new File(zipFilePath + "/" +fileName);if(zipFile.exists()) {
System.out.println(zipFilePath + "目录下存在名字为:" + fileName + ".zip" + "打包文件.");
}else{
File[] sourceFiles=sourceFile.listFiles();if (null == sourceFiles || sourceFiles.length < 1) {
System.out.println("待压缩的文件目录:" + sourceFilePath + "里面不存在文件,无需压缩.");
}else{
fos= newFileOutputStream(zipFile);
zos= new ZipOutputStream(newBufferedOutputStream(fos));byte[] bufs = new byte[1024 * 10];for (int i = 0; i < sourceFiles.length; i++) {//创建ZIP实体,并添加进压缩包
ZipEntry zipEntry = newZipEntry(sourceFiles[i].getName());
zos.putNextEntry(zipEntry);//读取待压缩的文件并写进压缩包里
fis = newFileInputStream(sourceFiles[i]);
bis= new BufferedInputStream(fis, 1024 * 10);int read = 0;while ((read = bis.read(bufs, 0, 1024 * 10)) != -1) {
zos.write(bufs,0, read);
}
}
flag= true;
}
}
}catch(Exception e) {
e.printStackTrace();throw newRuntimeException(e);
}finally{//关闭流
try{if (null !=bis) bis.close();if (null !=zos) zos.close();
}catch(IOException e) {
e.printStackTrace();throw newRuntimeException(e);
}
}returnflag;
}
}