JAVA给文件打包zip
对于多份文档同时下载的时候,很多用户更希望能够打包下载,使用java的程序猿,可以这样操作:
jar: commons-compress-1.9.jar
http://commons.apache.org/proper/commons-compress/
1、编写工具类:
package com.post.bank.finrisk.util; import java.io.File; import java.io.FileInputStream; import java.io.OutputStream; import org.apache.commons.compress.archivers.ArchiveOutputStream; import org.apache.commons.compress.archivers.ArchiveStreamFactory; import org.apache.commons.compress.archivers.zip.ZipArchiveEntry; /** * 打包工具类 */ public class FileZipUtil { /** * 给多个文件打包 * @param files 文件路劲数组 * @param outputStream * @return */ public static boolean zip(String[] files,OutputStream outputStream) { try { ArchiveOutputStream zipStream = new ArchiveStreamFactory() .createArchiveOutputStream(ArchiveStreamFactory.ZIP, outputStream); //打包过程 for (String filePath : files) { File file = new File(filePath); ZipArchiveEntry entry = new ZipArchiveEntry(file, file.getName()); zipStream.putArchiveEntry(entry); FileInputStream fis = new FileInputStream(file); byte[] buf = new byte[1024]; int len = 0; while ((len = fis.read(buf)) > 0) { zipStream.write(buf, 0, len); } fis.close(); zipStream.closeArchiveEntry(); } zipStream.close(); } catch (Exception e) { e.printStackTrace(); return false; } return true; } }
2、web应用中调用例子,构造文件数组即可
//多个文件打包输出处理 response.reset(); //清空流文件头 //设定输出文件头 String filedisplay = "测试表词条集合"; filedisplay = URLEncoder.encode(filedisplay, "UTF-8"); response.addHeader("Content-Disposition", "attachment;filename="+ filedisplay+".zip"); response.setContentType("application/zip"); OutputStream outputStream = response.getOutputStream(); //打包处理 FileZipUtil.zip(files, outputStream); outputStream.flush(); //输出后删除相应的文件 for (String path : files) { File file = new File(path); // 路径为文件且不为空则进行删除 if (file.isFile() && file.exists()) { file.delete(); } }

浙公网安备 33010602011771号