package com.example.test.utils;
import cn.hutool.core.date.DateUtil;
import java.io.*;
import java.util.Date;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/**
* @author bianlei
*/
public class FileZipUtil {
/**
* 文件打压缩包
* @param files
* @param Name
* @return
* @throws Exception
*/
public static File zipFile(List<File> files, String Name)
throws Exception {
ZipOutputStream zipOut=null;
FileOutputStream fous=null;
Date date = DateUtil.date();
String zipName = Name + DateUtil.format(date, "yyyyMMddHHmmss");
File tempFile = File.createTempFile("temp","");
File zipFile = new File(tempFile.getParent(),zipName+".zip");
try {
//创建文件输出流
fous = new FileOutputStream(zipFile);
zipOut = new ZipOutputStream(fous);
//压缩打包
zipFileToOutputStream(files, zipOut);
return zipFile;
}catch (Exception e) {
e.printStackTrace();
}finally{
if(zipOut!=null){
zipOut.close();
}
if(fous !=null){
fous.close();
}
}
return null;
}
/**
* 把接受的全部文件打成压缩包
* @param files<File>;
* @param outputStream
*/
public static void zipFileToOutputStream(List<File> files, ZipOutputStream outputStream) {
int size = files.size();
for(int i = 0; i < size; i++) {
File file = files.get(i);
inputFile(file, outputStream);
}
}
/**
* 根据输入的文件与输出流对文件进行打包
* @param inputFile
* @param ouputStream
*/
public static void inputFile(File inputFile,ZipOutputStream ouputStream) {
if(inputFile.exists() && inputFile.isFile()) {
FileInputStream IN = null;
BufferedInputStream bins = null;
try {
IN = new FileInputStream(inputFile);
bins = new BufferedInputStream(IN, 512);
ZipEntry entry = new ZipEntry(inputFile.getName());
ouputStream.putNextEntry(entry);
// 向压缩文件中输出数据
int nNumber;
byte[] buffer = new byte[512];
while ((nNumber = bins.read(buffer)) != -1) {
ouputStream.write(buffer, 0, nNumber);
}
// 关闭创建的流对象
bins.close();
IN.close();
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
if (bins != null){
bins.close();
}
if (IN != null){
IN.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}