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 文件的压缩的更多相关文章

  1. java对 zip文件的压缩和解压(ant解决中文乱码)

    说明: 1.对于压缩的文件,当文件名称是中文时,若使用JDK API中自带的类(java.util.zip.ZipEntry; java.util.zip.ZipOutputStream;)进行压缩, ...

  2. [Java 基础] 使用java.util.zip包压缩和解压缩文件

    reference :  http://www.open-open.com/lib/view/open1381641653833.html Java API中的import java.util.zip ...

  3. java.util.zip压缩打包文件总结二: ZIP解压技术

    一.简述 解压技术和压缩技术正好相反,解压技术要用到的类:由ZipInputStream通过read方法对数据解压,同时需要通过CheckedInputStream设置冗余校验码,如: Checked ...

  4. java.util.zip压缩打包文件总结一:压缩文件及文件下面的文件夹

    一.简述 zip用于压缩和解压文件.使用到的类有:ZipEntry  ZipOutputStream 二.具体实现代码 package com.joyplus.test; import java.io ...

  5. 利用Java进行zip文件压缩与解压缩

    摘自: https://www.cnblogs.com/alphajuns/p/12442315.html 工具类: package com.alphajuns.util; import java.i ...

  6. java.util.zip.ZipOutputStream压缩无乱码(原创)

    package io; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.FileI ...

  7. java.util.zip.Deflater 压缩 inflater解压 实例

    原文:java压缩解压缩类实例[转] package com.example.helloworld; import java.io.ByteArrayOutputStream; import java ...

  8. Java做成Zip文件,Java实现压缩文件

    import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import ...

  9. 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.错误原因 由于在导出文件时,要将导出的文件压缩到压缩 ...

  10. java.util.zip

    使用java自带的类 java.util.zip进行文件/目录的压缩的话,有一点不足,不支持中文的名件/目录命名,如果有中文名,那么打包就会失败.本人经过一段时间的摸索和实践,发现在一般的Ant.ja ...

随机推荐

  1. 基于 MediatR 和 FluentValidation 的 CQRS 验证管线

    基于 MediatR 和 FluentValidation 的 CQRS 验证管线 CQRS Validation Pipeline with MediatR and FluentValidation ...

  2. Powershell 源码批判

    代码里充斥着过程式编程的搞法:比如这里 Utils.PathIsUnc,分散的到处都是 internal static IEnumerable<string> GetDefaultAvai ...

  3. 【MyBatis】学习笔记08:批量删除

    [Mybatis]学习笔记01:连接数据库,实现增删改 [Mybatis]学习笔记02:实现简单的查 [MyBatis]学习笔记03:配置文件进一步解读(非常重要) [MyBatis]学习笔记04:配 ...

  4. Qt编写安防视频监控系统46-视频存储

    一.前言 在整个视频监控系统的开发迭代升级过程中,遇到过各种奇奇怪怪的需求,都是客户提出来的,有些需求很合理,有些就不那么的自然了,牢记这客户是上帝的原则,能满足的尽量满足.相信各位同行的研发人员都会 ...

  5. [转]idea2021.1破解版 附安装教程免激活码

    参看链接:http://www.ddooo.com/softdown/190256.htm 百度网盘地址:https://pan.baidu.com/share/init?surl=qwywmPK-F ...

  6. DVWA靶场Weak Session IDs(弱会话) 漏洞所有级别通关教程及源码审计

    Weak Session IDs(弱会话) Weak Session IDs(弱会话ID)漏洞是一种安全漏洞,涉及在 web 应用程序中使用不安全或容易被猜测的会话标识符(Session IDs).会 ...

  7. Docker 迁移数据目录

    Centos7 环境,采用yum安装的,默认数据目录在/var/lib/docker中 1. 关闭docker服务 systemctl stop docker 2. 备份和迁移 # 迁移 cp -r ...

  8. JS 模拟鼠标事件mouse over、click,kepress

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...

  9. [转载] ABP框架理论学习之后台工作(Jobs)和后台工作者(Workers)

    介绍 ABP提供了后台工作和后台工作者,它们会在应用程序的后台线程中执行一些任务. 后台工作 后台工作以队列和持续的方式在后台给一些即将被执行的任务排队.你可能因为某些原因需要后台工作,比如: 执行长 ...

  10. MAC安装redis的简单方法

    part 1:安装redis1.官网下载压缩包https://redis.io/download or brew install redis(太慢了-)我此处选的法一,先去官网上下载包,在解压使用. ...