重点在于

zos.putNextEntry(new ZipEntry(entry.getKey() + File.separator + file.getName()));

这一行代码。使用entry.getKey()用来作为文件夹名,File.separator是作为分隔符(windows是  \ )

以下为项目中使用的完整代码。

public void zipMultipleFiles(Map<String, List<File>> files, HttpServletResponse response) {String downloadFilename = SDF.format(new Date());ZipOutputStream zos = null;InputStream in = null;List<String> fileNameList = new ArrayList<>();try {response.setContentType("application/octet-stream");// 指明response的返回对象是文件流response.setHeader("Content-Disposition", "attachment;filename=" + downloadFilename);// 设置在下载框默认显示的文件名downloadFilename = URLEncoder.encode(downloadFilename, "UTF-8");zos = new ZipOutputStream(response.getOutputStream());for (Map.Entry<String, List<File>> entry : files.entrySet()) {System.out.println(entry.getKey());if (EmptyUtil.isNotEmpty(entry.getValue())) {for (File file : entry.getValue()) {zos.putNextEntry(new ZipEntry(entry.getKey() + File.separator + file.getName()));in = new FileInputStream(FileUtil.getFilePath(file.getFileName()));byte[] buffer = new byte[1024];int r = 0;while ((r = in.read(buffer)) != -1) {zos.write(buffer, 0, r);}in.close();}zos.flush();}}} catch (Exception e) {logger.error("zipFiles error!!", e);} finally {if (EmptyUtil.isNotEmpty(zos)) {try {zos.close();} catch (IOException e) {e.printStackTrace();}try {zos.flush();} catch (IOException e) {e.printStackTrace();}}if (EmptyUtil.isNotEmpty(in)) {try {in.close();} catch (IOException e) {e.printStackTrace();}}}}

参考资料:https://yq.aliyun.com/articles/700155

java 文件zip打包下载 多个文件夹分类相关推荐

  1. Yii2实现文件zip打包下载功能

    public function actionFiles($ids){$ids = explode(',',$ids);$materialData = Material::findAll($ids);$ ...

  2. JAVA实现文件批量打包下载

    JAVA实现文件批量打包下载 实现 1.打包工具类的实现 /*** @author zhouxuan* @since 2019/4/19*/ public class ZipUtils {/*** @ ...

  3. zip格式压缩文件并打包下载

    压缩文件并下载 zip格式压缩文件并打包下载 zip格式压缩文件并打包下载 Map<String, String> param = new HashMap<String, Strin ...

  4. C# 用zip,批量压缩文件,并打包下载

    C# 用zip,批量压缩文件,并打包下载,无需产生临时文件,二种都可以 using ICSharpCode.SharpZipLib.Checksums; using ICSharpCode.Sharp ...

  5. Java web系统打包成exe安装文件

    Java web系统打包成exe安装文件 一.    工具准备 1.        NSIS打包工具: http://nsis.sourceforge.net下载并安装: 2.        NSIS ...

  6. JavaWeb通过http下载多个文件,打包下载,压缩下载

    JavaWeb通过http下载多个文件,打包下载,压缩下载 DownloadController.java 代码如下 package gov.zhbs.web;import gov.zhbs.util ...

  7. 阿里云OSS文件批量打包下载

    阿里云OSS文件批量打包下载 public void downloadReport(List<String> fileNames,HttpServletResponse response) ...

  8. ASP.NET多文件批量打包下载

    在项目实施中,遇到了将多个文件一起打包后,提供给用户下载.如:在一个ASP.NET的开发项目中,通过一个GridView选中对应行数据的CheckBox,就可以实现对选中文件的打包下载了. 在对多文件 ...

  9. 浏览器中利用js打包下载所有类型文件

    浏览器中利用js打包下载所有类型文件 概述 ajax请求方式打包下载所有类型文件 canvas渲染方式打包下载所有图片 相关知识 作者 概述 需求:1.项目中在浏览器中点击按钮后根据多个url地址下载 ...

  10. 实现多个存储服务器上文件浏览器打包下载

    关于本地文件zip打包返回给浏览器下载,这边有个很好的例子读取本地文件打包返回给浏览器下载,基本能解决的相关问题.而最近因为项目原因,打包返回给浏览器下载的是存储在fdfs上文件,然后对此代码修改了下 ...

最新文章

  1. C++ int与string的相互转换(含源码实现)
  2. 怎样用C语言数码管编写E1显示程序,跪求单片机0~99数码管显示用C语言编写的程序...
  3. 数据库——高级匹配条件
  4. POJ2777 Count Color 线段树区间更新
  5. OpenCV连接的组件Connected Components的实例(附完整代码)
  6. 计算机用户的特点,计算机应用基础 Windows的主要特点
  7. HTML5+NodeJs实现WebSocket即时通讯
  8. DNN:逻辑回归与 SoftMax 回归方法
  9. 自己总结的sql基本操作
  10. Pytorch Feature loss与Perceptual Loss的实现
  11. 神经元模型图手工制作,神经元模型图手工模型
  12. 计算机无法预览文件,win10系统百度网盘文件无法预览的解决方法
  13. syn 攻击脚本 python_python制作SYN泛洪攻击工具
  14. 在 QNAP(威联通)NAS 上自动查找和删除 重复文件 的方法
  15. 教你设置QQ空间个性签名档
  16. 【java】模拟物流快递系统程序设计
  17. 刷机入门 手把手教程
  18. showdown解析md文件
  19. Android之QQ登录
  20. 不允许一个用户使用一个以上用户名域一个服务器或共享

热门文章

  1. 原生Js从0开始实现一个链家网地图画圈找房功能
  2. 5G和4G有那些区别
  3. Chrome 谷歌浏览器查看网站证书
  4. 2021 Java面试真题集锦
  5. Android团队技术随写、随写
  6. 合同法律风险管理 被骗者刑事风险
  7. HTML:Marked-js+Bootstarp简单实现Markdown文本编辑器
  8. .9图片处理报错Error: java.lang.RuntimeException: Crunching Cruncher ic_coupon2.9.png failed, see logs
  9. 安卓手机投屏到台式电脑非常简单,系统工具就成
  10. 点到平面的距离、向量与平面夹角