springboot 中 java.util.zip 文件的压缩
package com.geotmt.billingcenter.common.utils; import org.datanucleus.util.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import java.io.*;
import java.util.zip.CRC32;
import java.util.zip.CheckedOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream; /**
* @Description 压缩与解压工具
* @Author yanghanwei
* @Date 18:42 2019-11-20
* @Version v1
**/
public class ZipUtils { private static final Logger logger = LoggerFactory.getLogger(ZipUtils.class); /**
* 压缩 zip
* @param filePath 文件夹 全路径
* @param fileName 文件夹名称
* @param outPath 压缩文件保存路径
*/
public static void zipFile(String filePath, String fileName, String outPath) {
logger.info("filePath:{}, fileName:{}, outPath:{}", filePath, fileName, outPath);
try {
//创建Test.zip文件
OutputStream is = new FileOutputStream(outPath);
//检查输出流,采用CRC32算法,保证文件的一致性
CheckedOutputStream cos = new CheckedOutputStream(is, new CRC32());
//创建zip文件的输出流
ZipOutputStream zos = new ZipOutputStream(cos);
//需要压缩的文件或文件夹对象
File file = new File(filePath);
//压缩文件的具体实现函数
zipFilePost(zos,file,filePath,fileName,outPath);
zos.close();
cos.close();
is.close();
System.out.println("压缩完成");
} catch (Exception e) {
logger.error("压缩失败zipFile,Exception:" + e);
}
} /**
* 压缩文件
* @param zos zip文件的输出流
* @param file 需要压缩的文件或文件夹对象
* @param filePath 压缩的文件路径
* @param fileName 需要压缩的文件夹名
* @param outPath 缩完成后保存为Test.zip文件
*/
private static void zipFilePost(ZipOutputStream zos, File file, String filePath, String fileName, String outPath){ try{
String path = file.getPath();
String zosName = "";
if(!StringUtils.isEmpty(path)){
zosName = path.substring(path.indexOf(fileName));
}
File[] files = file.listFiles();
if(file.isDirectory() && files != null && files.length > 0) {
// 创建压缩文件的目录结构
zos.putNextEntry(new ZipEntry(zosName + File.separator));
for(File f : files) {
zipFilePost(zos, f, filePath, fileName, outPath);
}
} else {
logger.info("正在压缩文件:{}",file.getName());
// 创建压缩文件
zos.putNextEntry(new ZipEntry(zosName));
// 用字节方式读取源文件
InputStream is = new FileInputStream(file.getPath());
// 创建一个缓存区
BufferedInputStream bis = new BufferedInputStream(is);
// 字节数组,每次读取1024个字节
byte [] b = new byte[1024];
// 循环读取,边读边写
while(bis.read(b)!=-1) {
// 写入压缩文件
zos.write(b);
}
//关闭流
bis.close();
is.close();
}
} catch (Exception e) {
logger.error("压缩文件失败zipFilePost,Exception:" + e);
}
} public static void main(String[] args) throws Exception{
String filePath = "/var/folders/88/jh37h0fj59l1f302jdryz4780000gn/T/201908月小微平台消耗-1574300435525/";
// 需要压缩的文件夹名
String fileName = "201908月小微平台消耗-1574300435525";
// 压缩完成后保存为Test.zip文件,名字随意
String outPath = "/var/folders/88/jh37h0fj59l1f302jdryz4780000gn/T/Test3.zip";
zipFile(filePath, fileName, outPath);
}
}
转自:https://blog.csdn.net/qq_29323645/article/details/103202158
springboot 中 java.util.zip 文件的压缩的更多相关文章
- java对 zip文件的压缩和解压(ant解决中文乱码)
说明: 1.对于压缩的文件,当文件名称是中文时,若使用JDK API中自带的类(java.util.zip.ZipEntry; java.util.zip.ZipOutputStream;)进行压缩, ...
- [Java 基础] 使用java.util.zip包压缩和解压缩文件
reference : http://www.open-open.com/lib/view/open1381641653833.html Java API中的import java.util.zip ...
- java.util.zip压缩打包文件总结二: ZIP解压技术
一.简述 解压技术和压缩技术正好相反,解压技术要用到的类:由ZipInputStream通过read方法对数据解压,同时需要通过CheckedInputStream设置冗余校验码,如: Checked ...
- java.util.zip压缩打包文件总结一:压缩文件及文件下面的文件夹
一.简述 zip用于压缩和解压文件.使用到的类有:ZipEntry ZipOutputStream 二.具体实现代码 package com.joyplus.test; import java.io ...
- 利用Java进行zip文件压缩与解压缩
摘自: https://www.cnblogs.com/alphajuns/p/12442315.html 工具类: package com.alphajuns.util; import java.i ...
- java.util.zip.ZipOutputStream压缩无乱码(原创)
package io; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.FileI ...
- java.util.zip.Deflater 压缩 inflater解压 实例
原文:java压缩解压缩类实例[转] package com.example.helloworld; import java.io.ByteArrayOutputStream; import java ...
- Java做成Zip文件,Java实现压缩文件
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import ...
- java.util.zip.ZipException:ZIP file must have at least one entry
1.错误描述 java.util.zip.ZipException:ZIP file must have at least one entry 2.错误原因 由于在导出文件时,要将导出的文件压缩到压缩 ...
- java.util.zip
使用java自带的类 java.util.zip进行文件/目录的压缩的话,有一点不足,不支持中文的名件/目录命名,如果有中文名,那么打包就会失败.本人经过一段时间的摸索和实践,发现在一般的Ant.ja ...
随机推荐
- 欢迎 PaliGemma 2 – 来自 Google 的新视觉语言模型
我们很高兴迎来 Google 全新的视觉语言模型 PaliGemma 2,这是 PaliGemma 的一个新版本.与其前代产品一样,PaliGemma 2 使用强大的 SigLIP 进行视觉处理,但在 ...
- Flutter 收起键盘
Flutter收起键盘 在根Widget中嵌套GestureDetector return GestureDetector( // 触摸收起键盘 behavior: HitTestBehavior.t ...
- rabbitmq3.7.3 发布了一个新的 exchange x-random
direct exchange 同一个 routing key 可以绑定多个 queue,当给这个routing key发消息时,所有 queue 都会投递.这个行为对于一些场景不适用,有时我们希望只 ...
- 推荐一个C#轻量级矢量图形库
推荐一个轻量级矢量图形库,可用于生成 PDF.SVG.PNG等. 01 项目简介 VectSharp 是一个功能强大的 C# 库,专门用于创建矢量图形,包括文本,不依赖任何第三方,支持跨平台运行,包括 ...
- Linux查找JDK的 实际位置
检查JDK是否安装 java -version 查找java命令的位置 which java 查找列出该链接所指向的原始文件或目录 ls -l /usr/bin/java 查找目录 ls -l /et ...
- 超图SuperMap Objects的API开发中线对象和点对象查询
注意:超图API开发中,如果将线对象和点对象都同时画在同一个CAD图层中,则在图查属性时,有可能现查询到线对象,而不能查询到点对象的信息.
- Solution Set -“似一捧细泉的奔逃”
目录 0.「OurOJ #47912」优美的分配方案 1.「OurOJ #47927」海之女仆 2.「OurOJ #47950」中档题 3.「OurOJ #47933」坐标 4.「OurOJ #479 ...
- Kernel Memory 让 SK 记住更多内容
Kernel Memory (KM) 是一种多模态 AI 服务,专注于通过自定义的连续数据混合管道高效索引数据集.它支持检索增强生成(RAG).合成记忆.提示工程以及自定义语义记忆处理.KM 支持自然 ...
- YUV 格式
1. YUV比例 分三种:YUV44,YUV422,YUV420 2. YUV排布 分三种:YUV planar,YUV Semi-Plannar,YUV packed 以YUV422 8*4 为例 ...
- excel表格粘贴到网页的功能
背景 项目有表格功能,表格过大,一个一个填,过于麻烦. 需要从excel表复制的功能. 过程 监听paste事件,根据事件提供的clipboardData属性,获取数据. 根据换行符 \n 和tab符 ...