使用压缩下载需要用到两个工具类 ZipUtil ,IOUtil 直接导入即可

1.方法

//附件下载@Override@Transactionalpublic Result<Object> download(HttpServletRequest request, HttpServletResponse response, String id) {Result<Object> result = new Result<>();//文件保存路径String savaPath = "URL";//通过ZipUtil将文件夹压缩File zip = ZipUtil.zip(savaPath);//在当前目录下保存ZipUtil.unzip("URL");//压缩包存放路径String zipPath = "URL";//压缩包名称String zipName= id+".zip";File file = new File(zipPath+"/"+zipName);InputStream fis = null;try {fis = new FileInputStream(file);response.reset();response.setCharacterEncoding("UTF-8");response.setContentType("application/force-download");// 设置强制下载不打开response.addHeader("Content-Disposition","attachment;filename=" + new String(zipName.getBytes("utf-8"), "iso8859-1"));response.setHeader("Content-Length", String.valueOf(file.length()));byte[] b = new byte[1024];int len;while ((len = fis.read(b)) != -1) {response.getOutputStream().write(b, 0, len);}response.flushBuffer();fis.close();result.setStatus(1);result.setMessage("下载完成");} catch (IOException e) {result.setStatus(2);result.setMessage("下载失败");return  result;}return result;}

2.ZipUtil

//ZipUtil
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
public class ZipUtil {private ZipUtil() {}public static File zip(String filePath) {File target = null;File source = new File(filePath);if (source.exists()) {// 压缩文件名=源文件名.zipString zipName = source.getName() + ".zip";target = new File(source.getParent(), zipName);if (target.exists()) {target.delete(); // 删除旧的文件}FileOutputStream fos = null;ZipOutputStream zos = null;try {fos = new FileOutputStream(target);zos = new ZipOutputStream(new BufferedOutputStream(fos));// 添加对应的文件EntryaddEntry("/", source, zos);} catch (IOException e) {throw new RuntimeException(e);} finally {IOUtil.closeQuietly(zos, fos);}}return target;}private static void addEntry(String base, File source, ZipOutputStream zos)throws IOException {// 按目录分级,形如:/aaa/bbb.txtString entry = base + source.getName();if (source.isDirectory()) {for (File file : source.listFiles()) {// 递归列出目录下的所有文件,添加文件EntryaddEntry(entry + "/", file, zos);}} else {FileInputStream fis = null;BufferedInputStream bis = null;try {byte[] buffer = new byte[1024 * 10];fis = new FileInputStream(source);bis = new BufferedInputStream(fis, buffer.length);int read = 0;zos.putNextEntry(new ZipEntry(entry));while ((read = bis.read(buffer, 0, buffer.length)) != -1) {zos.write(buffer, 0, read);}zos.closeEntry();} finally {IOUtil.closeQuietly(bis, fis);}}}public static void unzip(String filePath) {File source = new File(filePath);if (source.exists()) {ZipInputStream zis = null;BufferedOutputStream bos = null;try {zis = new ZipInputStream(new FileInputStream(source));ZipEntry entry = null;while ((entry = zis.getNextEntry()) != null&& !entry.isDirectory()) {File target = new File(source.getParent(), entry.getName());if (!target.getParentFile().exists()) {// 创建文件父目录target.getParentFile().mkdirs();}// 写入文件bos = new BufferedOutputStream(new FileOutputStream(target));int read = 0;byte[] buffer = new byte[1024 * 10];while ((read = zis.read(buffer, 0, buffer.length)) != -1) {bos.write(buffer, 0, read);}bos.flush();}zis.closeEntry();} catch (IOException e) {throw new RuntimeException(e);} finally {IOUtil.closeQuietly(zis, bos);}}}//测试public static void main(String[] args) {String targetPath = "E:\\cesi";File file = ZipUtil.zip(targetPath);System.out.println(file);ZipUtil.unzip("E:\\cesi.zip");}
}

3.IOUtil

//IOUtil
import java.io.Closeable;
import java.io.IOException;
public class IOUtil {public static void close(Closeable... closeables) throws IOException {if (closeables != null) {for (Closeable closeable : closeables) {if (closeable != null) {closeable.close();}}}}public static void closeQuietly(Closeable... closeables) {try {close(closeables);} catch (IOException e) {}}
}

文件及文件夹 压缩 下载相关推荐

  1. 多文件批量压缩下载,单文件夹压缩下载

    现有一个新需求,用户可选择多个文件,多文件批量压缩下载,由于传统的代码效率不高,网上查询资料,对部分内容进行了修改与整合,特此留档 以下的工具类能实现的内容有: 1:将多个文件放在一个文件夹中压缩下载 ...

  2. Java将网络图片下载至文件夹,然后将文件夹压缩成zip

    思路: 第一步.创建一个文件夹A,用来存图片 第二步.将图片转为图片流写入文件夹A 第三步.将文件夹压缩成ZIP 下面上代码 public class FileZipUtils {public sta ...

  3. 【原创】ASP.NET C# 压缩和解压缩文件、文件夹函数(测试通过)

    //注意:本文为博主原创,转载请注明出处,谢谢合作! #region 文件下载函数DownFile     /// <summary>     /// 下载文件方法     /// < ...

  4. Java实现将文件或者文件夹压缩成zip

    Java实现将文件或者文件夹压缩成zip 最近碰到个需要下载zip压缩包的需求,于是我在网上找了下别人写好的zip工具类.但找了好多篇博客,总是发现有bug.因此就自己来写了个工具类. 这个工具类的功 ...

  5. php将文件夹压缩成zip文件,将文件夹压缩成zip文件的php代码_php实例

    1.请先下载我准备好的zip.php工具类,下载后解压,将里面的文件放入对应的目录中,我是放在虚拟目录下的include文件夹中. 2.在你的php文件中加入下面代码即可 复制代码 代码如下: req ...

  6. 如何在Linux中使用sFTP上传或下载文件与文件夹

    如何在Linux中使用sFTP上传或下载文件与文件夹 sFTP(安全文件传输程序)是一种安全的交互式文件传输程序,其工作方式与 FTP(文件传输协议)类似. 然而,sFTP 比 FTP 更安全;它通过 ...

  7. 7z解压crc错误_百度网盘压缩下载文件的CRC校验错误的解决方法

    转载自:http://blog.sina.com.cn/s/blog_610787990102xcnv.html 百度网盘压缩下载文件的CRC校验错误的解决方法 从百度网盘用打包压缩方式下载的文件在解 ...

  8. 下载c语言软件后怎么解压,手机怎么解压文件 盘点常用手机压缩打包解压文件应用...

    手机现在是我们必不可少的工具,在下载应用的时候,众多网站已经把安装文件独立好了等我们去下载,但是如果你要把文件打包或者下载了网络上已经被打包压缩好的文件需要解压缩的时候,就会觉得很麻烦了,手机上可没有 ...

  9. 批量文件压缩下载(zip)

    ps:工作之余仅留备份用,未全面完善,请按需取用 一.主要关注两点:1.找到文件并压缩:2.通过文件输出流响应前端 @RestController @RequestMapping("/fil ...

最新文章

  1. sku属性组合小例子
  2. CodePage简介(转)
  3. mysql 列换行 表设计 设计_今天来讲一下怎么利用MySql进行库表设计
  4. 重磅开源|AOP for Flutter开发利器——AspectD
  5. spring基础Bean管理基于xml注入
  6. 计算机视觉论文-2021-07-09
  7. 先睹为快!第十一届数据技术嘉年华七大看点全揭秘
  8. 【以太坊源码阅读】椭圆曲线加密和EIP155
  9. HDU 1503 Advanced Fruits
  10. Vivado下的仿真入门
  11. 电脑版idm下载器好不好用?
  12. 金融科技圈的那些财富管理应用
  13. 腐蚀rust服务器命令_服务器指令_腐蚀RUST基本指令及服务器指令大全_3DM单机
  14. 最保险的“跳槽理由”
  15. sizeof 知多少
  16. CCNP之IGP学习笔记(2022)
  17. PS和PL共享DDR
  18. mysql的prepared statement
  19. 个人计算机专业报告,计算机专业个人实习报告
  20. Monitor Hot Plug Detection(MSDN翻译)

热门文章

  1. 大数据浪潮将催生信息产业第三极——“数据极”
  2. FTDI通用转USB芯片简述
  3. qt界面黑的咋办_去掉console黑窗口的方法(qt和vs)
  4. 快速分区MBR和GUID的区别
  5. 人体组织平面波超声成像仿真(MATLAB k-Wave仿真)
  6. Dataset:White Wine Quality白葡萄酒品质数据集的简介、下载、使用方法之详细攻略
  7. 烽火推系统源码,抖音矩阵系统源码,look look 。
  8. 黑马程序员顺义校区php_PHP面向对象开发视频教程[黑马程序员]
  9. 82.android 简单的当前运行内存清理
  10. 道翰天琼认知智能为您解密:Rust语言杀疯了!前有谷歌高薪争夺 Rust 人才,Facebook再官宣加入Rust基金会 「自2016年以来,Facebook 就已开始使用 Rust,并应用在开发