关键词搜索

源码搜索 ×
×

使用Java打包Zip文件

发布2023-02-13浏览989次

详情内容

在项目中可能会遇到,下载文件的情况,下载文件还是比较好处理的

比较简单的方式就是我们直接写入OutPutstream,网上会有很所类似的教程。

也可以使用一些现成的工具类。

那么当我们遇到了需要下载文件夹的时候,我们不得不遍历所有的文件,去逐个的下载文件,这个时候我们最好是返回给前端一个zip或者tar包的形式,供用户下载使用,这里我来分享一下有关Java如何将文件夹打包并且上传。

这里我们使用的核心类就是

ZipOutputStream

代码如下

  1. // 一般情况,我们先新建一个ZipOutputStream对象, 其中的outputStream就是我们的输出流
  2. ZipOutputStream zip = new ZipOutputStream(outputStream);
  3. // 假如这就是我们要下载的文件夹。
  4. String dir = "/root/data"
  5. // 文件的名称可以根据需要来定制化
  6. String fileName = "data.zip";
  7. response.setCharacterEncoding("UTF-8");
  8. response.addHeader("Access-Control-Allow-Origin", "*");
  9. response.setHeader("Access-Control-Expose-Headers", "*");
  10. // 下载文件名乱码问题
  11. response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
  12. //response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + downloadName);
  13. response.setContentType("application/octet-stream;charset=UTF-8");
  14. // 这就是最高级目录了,这也是最核心的方法,建立zip包下的层级关系,然后遇到文件写进去就行了,其他没啥特殊的
  15. zip.putNextEntry(new ZipEntry(dir));
  16. // 接下来,就是写一个递归方法了,类似下面的这个方法 , 伪代码如下
  17. private void handlerFile(Item item, String base) {
  18. zip.putNextEntry(new ZipEntry(dir + "" + base));
  19. if(item.isdir()) {
  20. // 如果是文件夹,文件夹没有内容的,只需要继续递归,要注意的是,zip文件夹的路径拼接
  21. handlerFile(item, base + item.name);
  22. } else {
  23. // 写文件,这里就要正式写文件了
  24. inputStream = item.getinputStream;
  25. BufferedInputStream bis = new BufferedInputStream(inputStream);
  26. byte[] buffer = new byte[1024];
  27. int num;
  28. while ((num = inputStream.read(buffer)) != -1) {
  29. zip.write(buffer, 0, num);
  30. }
  31. zip.flush();
  32. IOUtils.closeQuietly(bis);
  33. }
  34. }

相关技术文章

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载