打包指定文件夹以及子文件夹为ZIP包,亲测可用,粘贴即可运行
package com.example.plus.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/**
* Desc: 压缩包工具类
* Date: Created in 2018/5/19 13:51
*/
public class ZipUtil {
// @RequestMapping("/downPicker")
// public void downPicker(HttpServletResponse response){
// try{
// //压缩前的文件路径
// File fileToZip = new File(PathUtil.currentPath()+"Upload/"+taskNumber);
// //这个是压缩之后的文件绝对路径
// FileOutputStream fos = new FileOutputStream(
// "XX.zip");
// ZipOutputStream zipOut = new ZipOutputStream(fos);
// ZipUtil.zipFile(fileToZip, fileToZip.getName(), zipOut);
// zipOut.close();
// fos.close();
// //压缩完毕
// }catch(Exception e){
// throw new ErrorResult("系统繁忙,请稍后重试");
// }
// }
public static void zipFile(File fileToZip, String fileName, ZipOutputStream zipOut) throws IOException {
if (fileToZip.isHidden()) {
return;
}
if (fileToZip.isDirectory()) {
if (fileName.endsWith("/")) {
zipOut.putNextEntry(new ZipEntry(fileName));
zipOut.closeEntry();
} else {
zipOut.putNextEntry(new ZipEntry(fileName + "/"));
zipOut.closeEntry();
}
File[] children = fileToZip.listFiles();
for (File childFile : children) {
zipFile(childFile, fileName + "/" + childFile.getName(), zipOut);
}
return;
}
FileInputStream fis = new FileInputStream(fileToZip);
ZipEntry zipEntry = new ZipEntry(fileName);
zipOut.putNextEntry(zipEntry);
byte[] bytes = new byte[1024];
int length;
while ((length = fis.read(bytes)) >= 0) {
zipOut.write(bytes, 0, length);
}
fis.close();
}
}