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压缩包内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 基于Java向zip压缩包追加文件

    这篇文章主要介绍了基于Java向zip压缩包追加文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 有个需求,从某个接口下载的一个zip压缩包,往里面添加一个说明文件.搜索了一下,没有找到往zip直接添加文件的方法,最终解决方法是先解压.再压缩. 具体过程如下: 1.一个zip文件的压缩和解压工具类 pom.xml加入依赖包,如下: <dependency> <groupId>org.apache.ant</groupId&

  • Java多文件以ZIP压缩包导出的实现方法

    本文实例为大家分享了Java多文件以ZIP压缩包导出的具体代码,供大家参考,具体内容如下 1.使用java实现吧服务器的图片打包成一个zip格式的压缩包导出,多个文件打包导出. 2.代码如下: **ImageByteUtil.java** public class ImageByteUtil{ private static float QUALITY = 0.6f; public static void compressZip(List<File> listfiles, OutputStrea

  • java调用7zip解压压缩包的实例

    前言 最近的项目中需要用到解压缩包的功能,客户给出的压缩包的格式主要是rar和zip,因此就打算使用java调用7zip的命令行进行解压文件,本文主要记录一下实现的过程以及其中遇到的问题. 7zip命令行 7z <command> [<switches>...] <archive_name> [<file_names>...][<@listfiles...>] 7z的commands中包含添加文件到压缩包.从压缩包中删除文件以及提取文件等等多个命

  • Cygwin安装教程图文详解

    简介 cygwin是一个在windows平台上运行的unix模拟环境,是cygnus solutions公司开发的自由软件 Cygwin就是一个windows软件,该软件就是在windows上仿真linux操作系统 简言之,cygwin是一个在windows平台上运行的 linux模拟环境,使用一个Dll(动态链接库)来实现 这样,我们可以开发出Cygwin下的UNIX工具,使用这个DLL运行在Windows下 下载地址 1.Cygwin官网 链接: https://pan.baidu.com/

  • Java后台实现浏览器一键导出下载zip压缩包

    使用迭代器模式和组合模式实现浏览器一键导出下载为zip压缩包文件 由于项目需要,于是又想起之前看过的设计模式,于是便有了一键导出的想法. 思路简单明了.一步一步看下去就好. 1.创建组合对象 public abstract class FileComponent { /** * Description: 递归创建文件夹,或者文件 */ public void mkFile(){ throw new UnsupportedOperationException(); } /** * Descript

  • 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.SimpleD

  • Java中创建ZIP文件的方法

    java创建zip文件的代码如下如下: import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream; public cla

  • Java实现解析zip压缩包并获取文件内容

    目录 功能描述 相关源码 调用说明 测试效果 功能描述 页面上传一个源码压缩包,后端将压缩包解压,并获取每个文件中的内容. 相关源码 (1)首先定义一个与解压文件对应的实体类. package com.sonar.data.vo; import lombok.Data; /** * 文件解析对象 * * @author Yuanqiang.Zhang * @since 2022/7/12 */ @Data public class UnzipFileVo { /** * 类型:0-文件夹:1-文

  • Java实现创建Zip压缩包并写入文件

    前言 工作中需要把一些数据放到一个zip的压缩包中,可以使用 ZipOutputStream.ZipOutputStream可以将内容直接写入到zip包中.一般创建ZipOutputStream通常是先封装一个FileOutputStream,然后在每写入一个文件之前,需要先调用一次putNextEntry,然后使用write写入byte[]类型的数据,当写入完毕的时候使用colseEntry来结束这个文件的打包.当然也可以通过ZipOutputStream直接把数据写入压缩包内,在压缩包内构建

  • java动态导出excel压缩成zip下载的方法

    本文实例为大家分享了java动态导出excel压缩成zip下载的具体代码,供大家参考,具体内容如下 package pack.java.io.demo; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.text.Simpl

  • java实现一次性压缩多个文件到zip中的方法示例

    本文实例讲述了java实现一次性压缩多个文件到zip中的方法.分享给大家供大家参考,具体如下: 1.需要引入包: import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.zip.ZipEntr

  • Java批量导出word压缩后的zip文件案例

    一.js代码,由于参数比较大所以利用form表单使用post导出 function export_word(){ var selectedRows = $("#dg").datagrid("getSelections"); if (selectedRows.length==0) { showAlertWarning("请选择一条的信息..."); return; } if (selectedRows.length > 1) {//批量导出压

随机推荐