当前位置:主页 > java教程 > Java导出ZIP压缩包

Java实现导出ZIP压缩包的方法

发布:2022-06-28 08:58:20 59


给大家整理一篇Java相关的编程文章,网友白凝安根据主题投稿了本篇教程内容,涉及到Java导出ZIP压缩包、Java、ZIP压缩包、Java导出ZIP压缩包相关内容,已被652网友关注,下面的电子资料对本篇知识点有更加详尽的解释。

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中unsafe操作代码实例

    发布:2019-06-18

    本篇文章给大家分享了关于Java中unsafe操作的相关知识点以及相关的实例代码,有需要的朋友可以学习参考下。


  • Java常用内置注解的实例内容

    发布:2020-01-16

    这篇文章主要介绍了Java常用内置注解用法,结合实例形式分析了java使用@SuppressWarnings关闭警告信息以及@Depreca标注的元素不使用两种注解使用方法,需要的朋友可以参考下


  • Java实现获取指定个数的不同随机数

    发布:2021-08-25

    今天小编就为大家分享一篇关于Java实现获取指定个数的不同随机数,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧


  • Java文件和base64流相互转换功能实现方法

    发布:2019-06-07

    这篇文章主要介绍了Java实现文件和base64流的相互转换功能,涉及Java文件读取及base64 转换相关操作技巧,需要的朋友可以参考下


  • Java程序使用MySQL时返回参数为乱码的解决方案大全

    发布:2020-01-07

    这篇文章主要介绍了解决Java程序使用MySQL返回参数为乱码的问题的教程,通过示例来讲解utf-8编码在MySQL中的相关配置,示例需要的朋友可以参考下


  • Java中数组与集合的相互转换知识点分享

    发布:2020-01-16

    这篇文章主要介绍了Java中数组与集合的相互转换实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下


  • java读取简单excel通用工具类的实例内容

    发布:2021-06-08

    这篇文章主要为大家详细介绍了java读取简单excel通用工具类,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下


  • Java封装器的实例用法讲解

    发布:2019-10-29

    这篇文章主要介绍了Java基础之类型封装器,结合实例形式分析了java类型封装相关原理与操作技巧,需要的朋友可以参考下


网友讨论