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, OutputStream output,String encode, boolean compress,String alias){
  ZipOutputStream zipStream = null;
  try {
      zipStream = new ZipOutputStream(output);
      for (File file : listfiles){
        compressZip(file, zipStream, compress,alias+"_"+(listfiles.indexOf(file)+1));
      }
    } catch (Exception e) {
      e.printStackTrace();
    }finally {
      try {
        if (zipStream != null) {
          zipStream.close();
        }
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
  }

private static void compressZip(File file, ZipOutputStream zipStream,
      boolean compress,String alias) throws Exception{
    FileInputStream input = null;
    try {
      input = new FileInputStream(file);
      //zip(input, zipStream, file.getName(), compress);
      zip(input, zipStream, alias+"."+file.getName().substring(file.getName().lastIndexOf(".")+1), compress);
    } catch (Exception e) {
      e.printStackTrace();
    }finally {
      try {
        if(input != null)
          input.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
  }

private static void zip(InputStream input, ZipOutputStream zipStream,
      String zipEntryName, boolean compress) throws Exception{
      byte[] bytes = null;
    BufferedInputStream bufferStream = null;
    try {
      if(input == null)
        throw new Exception("获取压缩的数据项失败! 数据项名为:" + zipEntryName);
      // 压缩条目不是具体独立的文件,而是压缩包文件列表中的列表项,称为条目,就像索引一样
      ZipEntry zipEntry = new ZipEntry("图片/"+zipEntryName);
      // 定位到该压缩条目位置,开始写入文件到压缩包中
      zipStream.putNextEntry(zipEntry);
      if (compress) {
        bytes = ImageByteUtil.compressOfQuality(input, 0);
        zipStream.write(bytes, 0, bytes.length);
      } else {
        bytes = new byte[1024 * 5];// 读写缓冲区
        bufferStream = new BufferedInputStream(input);// 输入缓冲流
        int read = 0;
        while ((read = bufferStream.read(bytes)) != -1) {
          zipStream.write(bytes, 0, read);
        }
      }
    } catch (IOException e) {
      e.printStackTrace();
    } finally {
      try {
        if (null != bufferStream)
          bufferStream.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
  }

  public static byte[] compressOfQuality(File file, float quality) throws Exception{
    byte[] bs = null;
    InputStream input = null;
    try {
      input = new FileInputStream(file);
      bs = compressOfQuality(input,quality);
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      try {
        if (input != null)
          input.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
    return bs;
  }

  public static byte[] compressOfQuality(InputStream input, float quality)
      throws Exception {
      ByteArrayOutputStream output = null;
    try {
      output = new ByteArrayOutputStream();
      if(quality == 0){
        Thumbnails.of(input).scale(1f).outputQuality(QUALITY)
        .toOutputStream(output);
      } else {
        Thumbnails.of(input).scale(1f).outputQuality(quality).toOutputStream(output);
      }
      return output.toByteArray();
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      try {
        if (output != null)
          output.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
    return null;
  }
}

**Main.java**

public static void main(String[] args){
  //要导出的文件集合,添加自己需要导出的文件
  List<File> ListFiles = new ArrayList<>();
  //调用工具类,参数说明(需要导出的文件集,ByteArrayOutputStream对象,编码,是否压缩【true,false】,文件名称前缀)
  ImageByteUtil.compressZip(ListFiles, out, "UTF-8", false,"LWJ");
  //指定导出格式
  ReturnContext.addParam("exportFileName","extFile.zip");
  ReturnContext.addParam("mimeType", "zip");
  return in;
}

3、此功能是根据在开发过程中项目需要实现的,测试可正常使用,可更改定制。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

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

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

  • 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 io文件操作从文件读取数据的六种方法

    目录 1.Scanner 2.Files.lines (Java 8) 3.Files.readAllLines 4.Files.readString(JDK 11) 5.Files.readAllBytes() 6.经典管道流的方式 在上一篇文章中,我为大家介绍了<5种创建文件并写入文件数据的方法>,本节我们为大家来介绍6种从文件中读取数据的方法. 另外为了方便大家理解,我为这一篇文章录制了对应的视频:总结java从文件中读取数据的6种方法-JAVA IO基础总结第二篇 Scanner(Ja

  • java io文件操作删除文件或文件夹的7种方法

    目录 本文是Java IO总结系列篇的第4篇,前篇的访问地址如下: 总结java中创建并写文件的5种方式-JAVA IO基础总结第一篇总结java从文件中读取数据的6种方法-JAVA IO基础总结第二篇总结java创建文件夹的4种方法及其优缺点-JAVA IO基础总结第三篇 如果您阅读完成,觉得此文对您有帮助,请给我点个赞,您的支持是我不竭的创作动力. 为了方便大家理解,我特意制作了本文对应的视频:总结删除文件或者文件夹的7种方法 一.删除文件或文件夹的四种基础方法 下面的四个方法都可以删除文件

  • java io文件操作删除文件或文件夹的7种方法

    目录 一.删除文件或文件夹的四种基础方法 二.如何删除整个目录或者目录中的部分文件 前提准备 2.1. walkFileTree与FileVisitor 2.2.Files.walk 2.3.传统IO-递归遍历删除文件夹 本文是Java IO总结系列篇的第4篇,前篇的访问地址如下: 总结java中创建并写文件的5种方式-JAVA IO基础总结第一篇 总结java从文件中读取数据的6种方法-JAVA IO基础总结第二篇 总结java创建文件夹的4种方法及其优缺点-JAVA IO基础总结第三篇 为了

  • 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如何把文件夹打成压缩包并导出

    目录 把文件夹打成压缩包并导出 1.打压缩包业务类 2.调用工具类 生成zip文件并导出 总结一下 获取下载zip文件流 把文件夹打成压缩包并导出 1.打压缩包业务类 @Controller public class AdminController { private String filePath = AdminController.class.getResource("/").getPath().split("WEB-INF")[0]+ "upload

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

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

  • Java将文件夹保留目录打包为 ZIP 压缩包并下载的教程详解

    上周做了一个需求,要求将数据库保存的 html 界面取出后将服务器下的css和js文件一起打包压缩为ZIP文件,返回给前台:在数据库中保存的是html标签,查出后,我把这些内容写入css和js等其他文件所在目录的一个文件内,然后将这整个文件夹压缩打包下载,解决过程中遇到了下载出来后并没有保存层级目录,在查了好久方法后完成了如下版本,已经可以正常下载并保留层级目录. //ZIP文件包压缩下载 @Override public void downloadZip(String id,HttpServl

  • Java实现文件压缩为zip和解压zip压缩包

    目录 压缩成.zip 解压.zip 压缩成.zip 代码如下: /** * 压缩成ZIP * * @param srcDir 压缩文件夹路径 * @param out 压缩文件输出流 * @throws RuntimeException 压缩失败会抛出运行时异常 */ public static void toZip(String srcDir, OutputStream out) throws RuntimeException { long start = System.currentTime

随机推荐