package com.common.util;
import org.apache.commons.lang3.StringUtils;
import org.springframework.util.ObjectUtils;
import javax.servlet.http.HttpServletRequest;
import java.io.*;
import java.util.List;
import java.util.Map;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/**
* @Description 本地文件zip打包
* @Author FangYN
* @Date 2019/12/25
**/
public class FileZipUtils {
public static final String imagePath = "/upload/image/";
/**
* @param filepath 文件所在目录
* @param zipPath 压缩后zip文件名称
* @param dirFlag zip文件中第一层是否包含一级目录,true包含;false没有
* @Date: 2019/9/17
* @Description: 压缩整个文件夹中的所有文件,生成指定名称的zip压缩包
*/
private void zipMultiFile(String filepath, String zipPath, boolean dirFlag, HttpServletRequest request, List<Map> studentList) {
ZipOutputStream zipOut = null;
ZipOutputStream zipFaceOut = null;
try {
String diskPath = getUploadFilePath(request);
File file = new File(diskPath + imagePath + filepath);// 要被压缩的文件夹
File zipFile = new File(diskPath + imagePath + zipPath);
zipOut = new ZipOutputStream(new FileOutputStream(zipFile));// 图片压缩文件
File zipFaceFile = new File(diskPath + imagePath + "faceEngine_" + zipPath);
zipFaceOut = new ZipOutputStream(new FileOutputStream(zipFaceFile));// 图片特征信息压缩文件
if (file.isDirectory()) {
// 图片信息打包
File[] files = file.listFiles();
for (File fileSec : files) {
int len = fileSec.getName().lastIndexOf(".");
String suffix = "";
if(len>0)
suffix = fileSec.getName().substring(len);
for (Map student : studentList) {
String code = student.get("CODE").toString();// 匹配编号
Object photo = student.get("PHOTO");
if (ObjectUtils.isEmpty(photo)) continue;
if (fileSec.getName().equals(code+ suffix)) { // 提取学生数据变动的内容图片及特征信息文件
String baseDir = "";
if (dirFlag)
baseDir = file.getName() + File.separator;
if(StringUtils.isBlank(suffix)){
recursionZip(zipFaceOut, fileSec, baseDir);
} else {
recursionZip(zipOut, fileSec, baseDir);
}
break;
}
}
}
}
zipOut.close();
zipFaceOut.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (null != zipOut) {
try {
zipOut.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != zipFaceOut) {
try {
zipFaceOut.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
private void recursionZip(ZipOutputStream zipOut, File file, String baseDir) throws Exception{
if(file.isDirectory()){
File[] files = file.listFiles();
for(File fileSec:files){
recursionZip(zipOut, fileSec, baseDir + file.getName() + File.separator);
}
}else{
byte[] buf = new byte[1024];
InputStream input = new FileInputStream(file);
zipOut.putNextEntry(new ZipEntry(baseDir + file.getName()));
int len;
while((len = input.read(buf)) != -1){
zipOut.write(buf, 0, len);
}
input.close();
}
}
/**
* 获取当前项目所在根目录地址
* @param request
* @return
*/
private static String getUploadFilePath(HttpServletRequest request){
String savePath = request.getSession().getServletContext().getRealPath("");
savePath = savePath.substring(0,savePath.lastIndexOf("\\"));
return savePath+"/";
}
}
Java-本地文件的zip打包
最新推荐文章于 2024-07-26 02:52:45 发布