Java实现导出ZIP压缩包的方法
- 更新时间:2022-06-28 08:58:20
- 编辑:符冬云
参考资料
- 疯狂Java实战演义 PDF 电子书 / 10.93MB / 杨恩雄,麦凯翔 推荐度:
- 深入理解Java虚拟机:JVM高级特性与最佳实践(第2版) PDF 电子书 / 253 MB / 周志明 推荐度:
- 《基于SpringBoot实现:Java分布式中间件开发入门与实战》源码文件 配套资源 / 206 MB / 钟林森 推荐度:
正文内容
Java导出ZIP压缩包
最近接触到一个需求要求压缩导出文件,于是乎便要致力于研究一下工具类啦,故也诞生了此篇文章。
下面代码中,溪源也将import
导入的依赖也贴出来了,避免大家引入错误。
import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import javax.servlet.http.HttpServletResponse; import java.io.*; import java.text.SimpleDateFormat; import java.util.Date; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; /** * @author wx * @date 2020/10/29 5:19 下午 */ public class FileZipUtil { private static void handlerFile(ZipOutputStream zip, File file, String dir) throws Exception { //如果当前的是文件夹,则进行进一步处理 if (file.isDirectory()) { //得到文件列表信息 File[] fileArray = file.listFiles(); if (fileArray == null) { return; } //将文件夹添加到下一级打包目录 zip.putNextEntry(new ZipEntry(dir + "/")); dir = dir.length() == 0 ? "" : dir + "/"; //递归将文件夹中的文件打包 for (File f : fileArray) { handlerFile(zip, f, dir + f.getName()); } } else { //当前的是文件,打包处理 //文件输入流 BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file)); ZipEntry entry = new ZipEntry(dir); zip.putNextEntry(entry); zip.write(FileUtils.readFileToByteArray(file)); IOUtils.closeQuietly(bis); zip.flush(); zip.closeEntry(); } } private static byte[] createZip(String sourceFilePath) throws Exception{ ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); ZipOutputStream zip = new ZipOutputStream(outputStream); //将目标文件打包成zip导出 File file = new File(sourceFilePath); handlerFile(zip, file,""); IOUtils.closeQuietly(zip); return outputStream.toByteArray(); } public static void exportZip(HttpServletResponse response, String sourceFilePath) { //文件名以时间戳作为前缀 SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); String filePrefix = sdf.format(new Date()); String downloadName = filePrefix + ".zip"; //将文件进行打包下载 try { OutputStream out = response.getOutputStream(); //接收压缩包字节 byte[] data = createZip(sourceFilePath); response.reset(); response.addHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Expose-Headers", "*"); response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + downloadName); response.addHeader("Content-Length", "" + data.length); response.setContentType("application/octet-stream;charset=UTF-8"); IOUtils.write(data, out); out.flush(); out.close(); } catch (Exception e) { e.printStackTrace(); } } }
客户端调用方法:
@GetMapping("/exportFile") public Result exportFile(HttpServletResponse response) { //第二个参数为:要压缩文件的地址 FileZipUtil.exportZip(response, "/Users/Downloads"); }
到此这篇关于Java实现导出ZIP压缩包的方法的文章就介绍到这了,更多相关Java导出ZIP压缩包内容请搜索码农之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持码农之家!
Java相关教程
-
Java中unsafe操作代码实例
本篇文章给大家分享了关于Java中unsafe操作的相关知识点以及相关的实例代码,有需要的朋友可以学习参考下。
发布时间:2019-06-18
-
Java常用内置注解的实例内容
这篇文章主要介绍了Java常用内置注解用法,结合实例形式分析了java使用@SuppressWarnings关闭警告信息以及@Depreca标注的元素不使用两种注解使用方法,需要的朋友可以参考下
发布时间:2020-01-16
-
Java实现获取指定个数的不同随机数
今天小编就为大家分享一篇关于Java实现获取指定个数的不同随机数,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
发布时间:2021-08-25
-
Java文件和base64流相互转换功能实现方法
这篇文章主要介绍了Java实现文件和base64流的相互转换功能,涉及Java文件读取及base64 转换相关操作技巧,需要的朋友可以参考下
发布时间:2019-06-07
-
Java程序使用MySQL时返回参数为乱码的解决方案大全
这篇文章主要介绍了解决Java程序使用MySQL返回参数为乱码的问题的教程,通过示例来讲解utf-8编码在MySQL中的相关配置,示例需要的朋友可以参考下
发布时间:2020-01-07
-
Java中数组与集合的相互转换知识点分享
这篇文章主要介绍了Java中数组与集合的相互转换实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
发布时间:2020-01-16
-
java读取简单excel通用工具类的实例内容
这篇文章主要为大家详细介绍了java读取简单excel通用工具类,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
发布时间:2021-06-08
-
Java封装器的实例用法讲解
这篇文章主要介绍了Java基础之类型封装器,结合实例形式分析了java类型封装相关原理与操作技巧,需要的朋友可以参考下
发布时间:2019-10-29