<!--文件压缩和解压工具类--><dependency><groupId>org.apache.ant</groupId><artifactId>ant</artifactId><version>1.7.1</version></dependency>
package com.example.demo.util;import lombok.extern.slf4j.Slf4j;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.taskdefs.Expand;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;import java.io.*;/*** 压缩文件和解压缩文件(公用工具类)** @author gblfy* @date 2020-10-12*/
@Slf4j
public class ZipReduceUtil {private static final int CACHE_SIZE = 1024;//文件读取缓冲区大小private static final String CHINESE_CHARSET = "GBK"; //使用GBK编码可以避免压缩中文文件名乱码//windows环境待压缩的文件路径public static final String wPath = "D:\\cmiip_Dir\\000000\\";//linux环境待压缩的文件路径public static final String linuxPath = "/app/cmiip_Dir/00000/";/*** 单元测试压缩*/public static void main(String[] args) {//应用待上传zip的前缀路径String localPath = "D:\\cmiip_Dir\\";//上传文件种类(类型)前缀String uploadPrefix = "S";//存量和增量标志String flag = "I";//批次号String batchNo = "0000000001";//待压缩的指定文件目录(文件夹)String wSourceFolder = wPath;// String lSourceFolder = linuxPath;//压缩文件统一处理ZipReduceDeal(localPath, uploadPrefix, batchNo, flag, wSourceFolder);}/*** 单元测试解压缩*/// public static void main(String[] args) throws Exception {//     ZipReduceUtil jzb = new ZipReduceUtil();////     String sourceZip = "D:\\cmiip_Dir\\S_I_0000000001_020.zip";//     String destDir = "D:\\cmiip_Dir\\";//     jzb.unZip(destDir, sourceZip);// }/*** 压缩文件夹为.zip到指定目录** @param localPath    应用待上传zip的前缀路径* @param uploadPrefix 上传文件种类(类型)前缀* @param batchNo      批次号* @param flag         存量和增量的标识* @param sourceFolder 压缩后的.zip绝对路径*/public static void ZipReduceDeal(String localPath, String uploadPrefix, String batchNo, String flag, String sourceFolder) {//将待压缩的指定文件目录(文件夹) 转换成文件类型的目录File fileNum = converFileTypeDir(sourceFolder);//获取压缩后指定文件夹下的long getlist = getlist(fileNum);//压缩完成后的zip的输出路径String zipOutputFilePath = localPath + uploadPrefix + "_" + flag + "_" + batchNo + "_0" + getlist + ".zip";//压缩完成后的zip的输出路径 转换成文件类型的目录File zipFilePath = converFileTypeDir(zipOutputFilePath);//开始压缩指定文件夹zip(sourceFolder, zipFilePath);}/*** 压缩文件** @param sourceFolder 压缩文件夹* @param zipFilePath  压缩文件输出路径*/public static void zip(String sourceFolder, File zipFilePath) {log.debug("待压缩的目录路径: {} 压缩后的zip包路径为: {}", sourceFolder, zipFilePath);OutputStream os = null;BufferedOutputStream bos = null;ZipOutputStream zos = null;try {os = new FileOutputStream(zipFilePath);bos = new BufferedOutputStream(os);zos = new ZipOutputStream(bos);// 解决中文文件名乱码zos.setEncoding(CHINESE_CHARSET);File file = new File(sourceFolder);String basePath = null;if (file.isDirectory()) {//压缩文件夹basePath = file.getPath();} else {basePath = file.getParent();}//压缩文件zipFile(file, basePath, zos);} catch (Exception e) {e.printStackTrace();} finally {try {if (zos != null) {zos.closeEntry();zos.close();}if (bos != null) {bos.close();}if (os != null) {os.close();}} catch (IOException e) {e.printStackTrace();}}}/*** 压缩文件** @param parentFile 待压缩文件夹* @param basePath* @param zos* @throws Exception*/private static void zipFile(File parentFile, String basePath, ZipOutputStream zos) throws Exception {File[] files = new File[0];if (parentFile.isDirectory()) {files = parentFile.listFiles();} else {files = new File[1];files[0] = parentFile;}String pathName;InputStream is;BufferedInputStream bis;byte[] cache = new byte[CACHE_SIZE];for (File file : files) {if (file.isDirectory()) {pathName = file.getPath().substring(basePath.length() + 1) + File.separator;zos.putNextEntry(new ZipEntry(pathName));zipFile(file, basePath, zos);} else {pathName = file.getPath().substring(basePath.length() + 1);is = new FileInputStream(file);bis = new BufferedInputStream(is);zos.putNextEntry(new ZipEntry(pathName));int nRead = 0;while ((nRead = bis.read(cache, 0, CACHE_SIZE)) != -1) {zos.write(cache, 0, nRead);}bis.close();is.close();}}}/*** 获取指定文件夹下的文件数量** @param f* @return*/public static long getlist(File f) {//递归求取目录文件个数log.debug("开始从 {} 路径下面获取指文件数量", f);long size = 0;File flist[] = f.listFiles();size = flist.length;for (int i = 0; i < flist.length; i++) {if (flist[i].isDirectory()) {size = size + getlist(flist[i]);size--;}}return size;}/*** 将String类型的目录转换为文件类型的目录** @param fileDir* @return*/public static File converFileTypeDir(String fileDir) {return new File(fileDir);}/*** 解压缩** @param destDir   解压缩后的目标目录   d:/cmiip_Dir* @param sourceZip 源zip文件      d:/cmiip_Dir/S_I_0000000001_020.zip*                  结果则是 将d:/cmiip_Dir/S_I_0000000001_020.zip文件解压缩到d:/cmiip_Dir目录下*/public void unZip(String destDir, String sourceZip) {try {Project prj1 = new Project();Expand expand = new Expand();expand.setProject(prj1);expand.setSrc(new File(sourceZip));expand.setOverwrite(false);//是否覆盖File f = new File(destDir);expand.setDest(f);expand.execute();} catch (Exception e) {e.printStackTrace();}}
}

ant压缩和解压缩工具类相关推荐

  1. Zip压缩和解压缩工具类

    依赖第三方jar包:ant-1.7.1.jar /** * @Title: ZipUtils.java * @Package com.sz.mt.test.zip * @Description: TO ...

  2. 适用于linux的解压工具,Linux系统中常用的压缩和解压缩工具

    Linux系统中常用的压缩和解压缩工具 压缩:以时间换空间的一种操作: 压缩的原理:标记和替换: 压缩比:压缩之前与压缩之后的文件大小的比值:其中:纯文本文件的压缩比较大,视频.图像等文件压缩比小 能 ...

  3. Linux中常用的几个压缩工具,Linux系统中常用的压缩和解压缩工具

    Linux系统中常用的压缩和解压缩工具 压缩:以时间换空间的一种操作: 压缩的原理:标记和替换: 压缩比:压缩之前与压缩之后的文件大小的比值:其中:纯文本文件的压缩比较大,视频.图像等文件压缩比小 能 ...

  4. linux 压缩 日期,Linux 时间日期类、搜索查找类、 压缩和解压类指令

    l 时间日期类 date指令-显示当前日期 基本语法 1) date (功能描述:显示当前时间) 2) date +%Y (功能描述:显示当前年份) 3) date +%m (功能描述:显示当前月份) ...

  5. 20190923-08Linux压缩和解压类 000 016

    gzip/gunzip 压缩 1.基本语法 gzip 文件 (功能描述:压缩文件,只能将文件压缩为*.gz文件) gunzip 文件.gz (功能描述:解压缩文件命令) 2.经验技巧 (1)只能压缩文 ...

  6. 用SharpZipLib来压缩和解压文件 --zt

    from:http://www.cnblogs.com/zhangweiguo3984/archive/2007/03/15/314333.html#675634 1.建立工程,添加引用,添加Shar ...

  7. java ant解压缩_java ant包中的org.apache.tools.zip实现压缩和解压缩实例详解

    java ant包中的org.apache.tools.zip实现压缩和解压缩实例详解 发布于 2020-4-7| 复制链接 摘记: java ant包中的org.apache.tools.zip实现 ...

  8. apache zip java_java中ant包中的org.apache.tools.zip实现压缩和解压缩

    其实apache中的ant包(请自行GOOGLE之ant.jar)中有一个更好的类,已经支持中文了,我们就不重复制造轮子了,拿来用吧, 这里最主要的功能是实现了 可以指定多个文件 到同一个压缩包的功能 ...

  9. C# ZipHelper C#公共类 -- ICSharpCode.SharpZipLib.dll实现压缩和解压

    关于本文档的说明 本文档基于ICSharpCode.SharpZipLib.dll的封装,常用的解压和压缩方法都已经涵盖在内,都是经过项目实战积累下来的 1.基本介绍 由于项目中需要用到各种压缩将文件 ...

最新文章

  1. NAT的完全分析及其UDP穿透的完全解决方案
  2. 为什么indexOf在数组IE8上不起作用?
  3. python大一适合学吗_大一学生是否应该去学习Python?
  4. 面试的时候的要注意的case应该怎么分析
  5. Android Studio之查找当前类的位置图标没了
  6. mysql第二章_第二章 初识MySQL
  7. CodeForces914 D.Bash and a Tough Math Puzzle(线段树)
  8. itextpdf使用总结
  9. 亮相SIGGRAPH 太极拳三维教学App制作揭秘
  10. 删除无限创建的子文件夹
  11. 任务调度系统就该这么设计(万能通用),稳的一批!
  12. Linux LVM卷组恢复过程记录
  13. C++程序设计:相邻数对
  14. linux里进程状态为sl,Linux ps state sl+是什么意思
  15. 互联网券商线上开户系统设计与开发技术分享
  16. 如何批量转换文件格式
  17. RK3399学习笔记 1.0.3---python环境 Firefly Core-3399pro-jd4 Win10上RKNN工具安装
  18. 中冠百年|年轻人收入低如何理财
  19. java公寓管理系统设计与实现,学生公寓管理系统的设计与实现(MySQL)
  20. WebView部分显示不全问题

热门文章

  1. 【数学笑话】数学家与灯神
  2. 数学家与诗人,都是这个世界上先知先觉的预言家
  3. HtmlUnit优秀文章
  4. Hbase Compaction 源码分析 - CompactionChecker
  5. Hbase 查看 rowkey在哪个region中
  6. 深度解说阿里云 Serverless Kubernetes
  7. 面向中后台复杂场景的低代码实践思路
  8. 阿里云全站加速DCDN升级
  9. 并发场景下的幂等问题——分布式锁详解
  10. 开启阿里云对象存储OSS防误删新功能,保护您珍贵的数据。