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. 对象存储COS-数据处理能力升级!“组合拳”助力存储新时代!

    近日腾讯云对象存储(COS)完成了"存储"到"存储+"的升级! 互联网让信息传播的更快,人们仿佛对信息更加渴望,我们身边的产品越来越多,获取信息的类型也丰富多样 ...

  2. 【Linux】CentOS7 远程联机

    # CentOS7 远程联机 哔哩哔哩 萌狼蓝天 博客:https://mllt.cc 微信公众号:萌狼蓝天 检查与安装配置OpenSSH [CentOS7]检查系统是否安装OpenSSH yum - ...

  3. 解决:pip is configured with locations that require TLS/SSL

    解决: mkdir -p ~/.pipvim ~/.pip/pip.conf然后输入内容: [global]index-url = http://mirrors.aliyun.com/pypi/sim ...

  4. shell脚本,主要是对输入参数检验

    usage(){  echo "\nUSAGE:\n"  echo "PmActivityReport.sh\t-type\t<latency|activity&g ...

  5. Mybatis-plus 简单使用

    Mybatis-plus 特点介绍: 1.无侵入:只做增强不做改变,引入它不会对现有工程产生影响 2.强大的CRUD操作:内置通用Mapper.Service,仅仅通过少量配置即可实现单表大部分CRU ...

  6. Qt/C++开发经验小技巧281-285

    悬停窗体QDockWidget默认在标题栏右键会弹出悬停模块的显示隐藏菜单,如果需要去掉,会发现设置Qt::NoContextMenu或者事件过滤器拦截都是无效的,必须设置 dockWidget-&g ...

  7. Qt编写可视化大屏电子看板系统20-横向分组图

    一.前言 横向分组图是柱状分组图的横向展示,有了横向柱状图加上分组图的绘制经验,这个做起来就比较简单了,横向的设置规则按照横向柱状图来,分组的规则按照柱状分组图的算法来,在横向的柱子中要绘制对应的值, ...

  8. 基于C#实现串口通信Demo

    原文链接:基于C#实现串口通信Demo

  9. [炼丹术]Yolov8训练使用总结

    Yolov8训练使用总结 Yolov8训练使用总结 介绍 安装 Install pip install ultralytics Development git clone https://github ...

  10. 记一次cannot access its superinterface问题的的排查 → 强如Spring也一样写Bug

    开心一刻 昨天在幼儿园,领着儿子在办公室跟他班主任聊他的情况 班主任:皓瑟,你跟我聊天是不是紧张呀 儿子:是的,老师 班主任:不用紧张,我虽然是你的班主任,但我也才22岁,你就把我当成班上的女同学 班 ...