ZIP工具类
import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; /** * Created by zzq on 2019/05/13. */ public class ZipUtils { public static void doCompress(String filelName, ZipOutputStream out) throws IOException{ doCompress(new File(filelName), out); } public static void doCompress(File file, ZipOutputStream out) throws IOException{ doCompress(file, out, ""); } public static void doCompress(File inFile, ZipOutputStream out, String dir) throws IOException { 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) throws IOException { String entryName = null; if (!"".equals(dir)) { entryName = dir + "/" + inFile.getName(); } else { entryName = inFile.getName(); } ZipEntry entry = new ZipEntry(entryName); out.putNextEntry(entry); int len = 0 ; byte[] buffer = new byte[1024]; FileInputStream fis = new FileInputStream(inFile); while ((len = fis.read(buffer)) > 0) { out.write(buffer, 0, len); out.flush(); } out.closeEntry(); fis.close(); } }
使用方法
String zipFileName = String.format("%s-%s.zip", sessionId, strNow); downLoadZipFile(response, zipFileName, tempDir, downloadFileNames);
/** * 下载 zip 文件 * @param response * @param zipName zip 文件名 * @param filePath 需要压缩的文件路径 * @param fileList 需要压缩的文件名列表 * @throws IOException */ public void downLoadZipFile(HttpServletResponse response, String zipName, String filePath, List<String> fileList) throws IOException { response.setContentType("APPLICATION/OCTET-STREAM"); response.setHeader("Content-Disposition","attachment; filename="+zipName); ZipOutputStream out = new ZipOutputStream(response.getOutputStream()); try { for (String fileName : fileList){ ZipUtils.doCompress(filePath + File.separator + fileName, out); response.flushBuffer(); } } catch (Exception e) { e.printStackTrace(); }finally{ out.close(); } }