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

作者:白枫J 时间:2023-10-08 14:05:20 

本文实例为大家分享了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、此功能是根据在开发过程中项目需要实现的,测试可正常使用,可更改定制。

来源:https://blog.csdn.net/lovelongjun/article/details/76104192

标签:java,压缩包,导出
0
投稿

猜你喜欢

  • Mybatis工具类JdbcTypeInterceptor运行时自动添加jdbcType属性

    2023-08-24 03:49:59
  • 在Android Studio中Parcelable插件的简单使用教程

    2022-05-08 17:12:26
  • 详解Java中switch的新特性

    2023-11-24 23:41:54
  • C#中label内容显示不全、不完整的解决方法

    2022-09-13 02:43:46
  • java并发高的情况下用ThreadLocalRandom来生成随机数

    2022-10-30 12:42:03
  • SpringBoot 如何使用RestTemplate发送Post请求

    2022-03-03 09:35:47
  • Kotlin 接口与 Java8 新特性接口详解

    2023-09-10 01:10:45
  • C#SuperSocket的搭建并配置启动总结

    2022-01-25 15:16:24
  • Java实现Web应用中的定时任务(实例讲解)

    2022-08-12 23:40:02
  • c# 实现汉诺塔游戏

    2022-11-21 01:02:57
  • Android最简单的限制输入方法(只包含数字、字母和符号)

    2022-01-22 00:15:45
  • C#使用webbrowser的常见用法实例

    2023-06-14 13:57:45
  • C#基于winform实现音乐播放器

    2021-06-27 14:13:14
  • C#计算矩阵的逆矩阵方法实例分析

    2021-11-06 18:24:29
  • java AOP原理以及实例用法总结

    2022-11-05 03:30:41
  • java 回调机制的实例详解

    2023-12-04 10:03:04
  • JAVA IDEA入门使用手册(新手小白必备)

    2022-10-21 16:31:25
  • Android编程之文件读写操作与技巧总结【经典收藏】

    2023-10-16 02:20:52
  • 基于SpringBoot Mock单元测试详解

    2021-09-25 02:49:41
  • Android SDK命令行工具Monkey参数及使用解析

    2023-07-13 17:00:33
  • asp之家 软件编程 m.aspxhome.com