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