ZIP压缩包下载总结:
1.需要将所有要压缩的文件或文件夹放至一个最外层的文件夹下(注意:该文件夹不会压缩进去,所以可以用随机数对包名进行命名,避免重复,currentFolder = “D:/gdsattachments/”)
2.将所有的文件进行拷贝放至该文件夹下FileUtil.copyFile(filePath,currentFolder);
3.如果压缩包中除了文件外还有文件夹,则文件夹的路径为currentFolder+“/”+“文件夹名字”,做为新的需要放文件的路径,然后将文件放至新的路径下(其实是对最外层的currentFolder文件夹进行压缩的)
4.最后递归压缩currentFolder中的所有文件和文件夹并包含文件夹中的所有文件等。
//ZIP文件名称
String zipFileName = startDate+ “至” + endDate+ “的业绩信息.zip”;
//压缩文件夹路径
String zipFilePath = currentFolder +“/”+ zipFileName;
//压缩文件夹
ZipUtils.batchCompress(currentFolder, zipFilePath, “”, true);

附ZipUtils的batchCompress方法:
/**
* @param src 被压缩的文件源路径
* @param newSrc 压缩后的新路径+名称
* @param zipName 压缩后内层文件的名称
* @param KeepDirStructure
* 是否保留原来的目录结构,true:保留目录结构;
* false:所有文件跑到压缩包根目录下(注意:不保留目录结构可能会出现同名文件,会压缩失败)
* @throws Exception
*/
public static void batchCompress(String src, String newSrc, String zipName, boolean KeepDirStructure) throws Exception{
ZipOutputStream zos = null;
try {
File sourceFile = new File(src);
if (sourceFile.isDirectory() && sourceFile.listFiles() != null && sourceFile.listFiles().length > 0) {
File[] listFiles = sourceFile.listFiles();
zos = new ZipOutputStream(new FileOutputStream(new File(newSrc)));
for (File file : listFiles) {
ZipUtils.compress(file, zos, file.getName(), KeepDirStructure);
}
}else {
zos = new ZipOutputStream(new FileOutputStream(new File(newSrc)));
ZipUtils.compress(sourceFile, zos, zipName, KeepDirStructure);
}
}finally {
if(zos != null) {
zos.close();
}
}
}

/**
* 递归压缩方法
* @param sourceFile
* 源文件
* @param zos
* zip输出流
* @param name
* 压缩后的名称
* @param KeepDirStructure
* 是否保留原来的目录结构,true:保留目录结构;
* false:所有文件跑到压缩包根目录下(注意:不保留目录结构可能会出现同名文件,会压缩失败)
* @throws Exception
*/
private static void compress(File sourceFile, ZipOutputStream zos, String name, boolean KeepDirStructure) throws Exception {
byte[] buf = new byte[BUFFER_SIZE];
if (sourceFile.isFile()) {
// 向zip输出流中添加一个zip实体,构造器中name为zip实体的文件的名字
zos.putNextEntry(new ZipEntry(name));
// copy文件到zip输出流中
int len;
FileInputStream in = new FileInputStream(sourceFile);
while ((len = in.read(buf)) != -1) {
zos.write(buf, 0, len);
}
// Complete the entry
zos.closeEntry();
in.close();
} else {
File[] listFiles = sourceFile.listFiles();// listFiles是获取该目录下所有文件和目录的绝对路径
if (listFiles == null || listFiles.length == 0) {
// 需要保留原来的文件结构时,需要对空文件夹进行处理
if (KeepDirStructure) {
// 空文件夹的处理
zos.putNextEntry(new ZipEntry(name + “/”));
// 没有文件,不需要文件的copy
zos.closeEntry();//关闭当前zip条目读取下一条
}

        } else {for (File file : listFiles) {// 判断是否需要保留原来的文件结构if (KeepDirStructure) {// 注意:file.getName()前面需要带上父文件夹的名字加一斜杠,// 不然最后压缩包中就不能保留原来的文件结构,即:所有文件都跑到压缩包根目录下了compress(file, zos, name + "/" + file.getName(), KeepDirStructure);} else {compress(file, zos, file.getName(), KeepDirStructure);}}}}
}

ZIP压缩包下载总结相关推荐

  1. 使用BLOB 进行docx格式文件、zip压缩包下载

    // docx 文件下载    如需xlsx格式文件 换掉后缀即可 useExportWithAxios: (url, params, file) => { // url 接口路径 // par ...

  2. java 导出表格打包zip文件下载_asyExcel导出excel并打包成zip压缩包下载

    假期期间自己在家撸码,刚好用到了导出,导出来之后是多个文件,所以需要打成压缩包并下载来给客户.查阅了一些资料,把这段代码贴在这,相当于有个记录吧. package com.business.testE ...

  3. easyExcel导出excel文件并打包成zip压缩包下载

    文件导出 专栏收录该内容 2 篇文章0 订阅 订阅专栏 package com.business.testExcelPort; import java.io.BufferedInputStream; ...

  4. 使用Hutool生成多个excel文件合并成zip压缩包下载

    这几天有个业务需要把项目里数据生成excel后打包zip下载,但之前的项目基本都是用Apache自带的poi去做,这个项目引入Hutool工具,所以就用了Hutool的功能去做了,跟之前相比感觉省事了 ...

  5. 通过javascript在网页端生成zip压缩包并下载

    通过javascript在网页端生成zip压缩包并下载 原文:通过javascript在网页端生成zip压缩包并下载 zip.js是什么 zip.js的github项目地址:http://gildas ...

  6. JavaWeb项目文件夹生成Zip压缩包并下载到本地

    1.FileToZip接口类 /**  *  */ package com.sale.util; import java.io.BufferedInputStream;   import java.i ...

  7. 【java】 文件批量下载并压缩为zip压缩包

    [java] 文件批量下载并压缩为zip压缩包 java常用的压缩技术 java中常见实现压缩与解压 业务场景 代码实现 注意点 java常用的压缩技术 常见的压缩格式有很多种,例如:zip.rar. ...

  8. 批量下载文件,打包成zip压缩包

    批量下载文件,用程序打成zip压缩包在下载 前台传来要下载的url数组 @RequestMapping(value = "/download",method = RequestMe ...

  9. SpringBoot多文件压缩包下载(多附件zip格式)

    文章目录 前言 : 此 Demo 为 Windows 环境下演示,部署到服务器的话路径需改成服务器的路径. 一.自定义工具类DownLoadZipUtil 二.Dao层分析与sql mapper层代码 ...

最新文章

  1. 如何用c语言将度分秒变为弧度_弧度与角度从哪里来
  2. preparestatement方法用多次_如何用java 5分钟实现一个最简单的mysql代理服务器?
  3. 自编码AutoEncoder 及PyTorch 实现
  4. Mac OS使用技巧之三:发射无线网络信号的方法
  5. Android插件化开发之动态加载的类型
  6. android访问百度新闻,百度新闻(com.baidu.news) - 8.3.6.0 - 应用 - 酷安
  7. 用ssh反向连接访问内网主机 ( 实例使用autossh隧道实现mysql的同步 )
  8. python基础列表(四)
  9. 蠕虫病毒往往是通过进入计算机系统,2011年上海市高校计算机等级考试1级模拟卷题目...
  10. Layer 2 DAO 基础协议 Metis 上线 Alpha 测试网
  11. 【Linux】VMware安装VMware Tools工具
  12. 《Python和Pygame游戏开发指南》——导读
  13. MySQL基础 增删改查练习
  14. excel如何选中空单元格并计算总计、平均值、率
  15. Skyscrapers (easy version)
  16. Nature:每两个月注射一次卡波替格拉韦可以让大多数人免受艾滋病毒
  17. excel股票今日走势计算机,怎样用excel 实时读取 股票日线数据
  18. Android 通知屏幕亮起
  19. 从零开始学习大数据系列之Linux-02Vim与Shell script
  20. [Ant自动打包]ant执行命令的详细参数和Ant自带的系统属性

热门文章

  1. 【c#】获取DGV单元格对象方法dgv按钮列的使用介绍
  2. 手机怎么拍照点数?好用的拍照点数方法来啦
  3. ASP.NET MVC+Bootstrap 实现短信验证
  4. elementUI——form表单
  5. 计算机二级考试Excel教程m,2019年计算机二级等级考试Excel函数公式汇总
  6. 万象:庸人容易因欠缺自知之明而自我膨胀
  7. ES更改默认分片数量及副本
  8. mysql全文索引与停止词
  9. centos执行yum命令报错,There are no enable repos
  10. 制作名片设计需要哪些要素