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. 在 .net core 与 .net framework 应用之间共享库

    如果你对 .net core 做了任何重要的提交,你就需要为 .net framework 共享同样的库,因为,.net core 是一个新兴的系统生态系统,仍然缺失很多部分. 在混合系统中,你有两个 ...

  2. ARGOCD用户管理

    1.创建用户alice kubectl apply -f argocd-cm.yaml apiVersion: v1 kind: ConfigMap metadata: name: argocd-cm ...

  3. Mac中nginx的默认安装路径和启动方式

    1.安装完以后,可以在终端输出的信息里看到一些配置路径: /usr/local/etc/nginx/nginx.conf (配置文件路径) /usr/local/var/www (服务器默认路径) / ...

  4. Qt音视频开发19-vlc内核各种事件通知

    一.前言 对于使用第三方的sdk库做开发,除了基本的操作函数接口外,还希望通过事件机制拿到消息通知,比如当前播放进度.音量值变化.静音变化.文件长度.播放结束等,有了这些才是完整的播放功能,在vlc中 ...

  5. Qt编写物联网管理平台35-实时曲线

    一.前言 设备采集到的数据,通过曲线展示也是一种非常好的方式,尽管之前已经有了表格数据展示.设备面板展示.设备地图展示等,实时曲线也是一种不错的方式,这个用户自由选择,反正通过端口已经拿到了所有要采集 ...

  6. 即时通讯安全篇(十一):IM聊天系统安全手段之传输内容端到端加密技术

    本文由融云技术团队分享,原题"互联网通信安全之端到端加密技术",内容有较多修订和改动. 1.引言 在上篇<IM聊天系统安全手段之通信连接层加密技术>中,分享了关于通信连 ...

  7. Java Web学生自习管理系统

    一.项目背景与需求分析 随着网络技术的不断发展和学校规模的扩大,学生自习管理系统的需求日益增加.传统的自习管理方式存在效率低下.资源浪费等问题,因此,开发一个智能化的学生自习管理系统显得尤为重要.该系 ...

  8. docker和主机之间文件传输

    docker和主机之间文件传输 1.从docker内部向主机传输文件 语法: docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|- 示例:将容器96f7 ...

  9. pip在线安装

    # 下载安装脚本 curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py # 运行安装脚本 sudo python3 get-pip.py # ...

  10. w3cschool-微信小程序开发文档-指南

    https://www.w3cschool.cn/weixinapp/9wou1q8j.html https://www.w3cschool.cn/miniappbook/ 微信小程序 小程序简介 小 ...