ant压缩和解压缩工具类

<!--文件压缩和解压工具类--><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();}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/519388.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java项目短信群发接口_JAVA实现第三方短信发送过程详解

想使代码生效需要注册&#xff1a;在muven项目里面导入jar包commons-codeccommons-codec1.4commons-httpclientcommons-httpclient3.1commons-loggingcommons-logging1.1.1org.apache.httpcomponentshttpclient4.3.1com.alibabadruid1.0.8com.alibabadruid1.0.8创建一个测试类&…

两亿人在家开会!钉钉紧急扩容1万台云服务器

2月3日是一个特殊的开工日&#xff0c;为防范疫情&#xff0c;在阿里巴巴钉钉上有超过1000万家企业组织的2亿上班族在线开工。为支持此次史无前例的办公需求&#xff0c;钉钉在阿里云上紧急扩容1万台云服务器来保障钉钉视频会议、群直播、办公协同等功能&#xff0c;保障用户流…

这些数据科学家必备的技能,你拥有哪些?

1.教育背景 88&#xff05;的数据科学家受过高等教育且拥有硕士学位&#xff0c;其中46&#xff05;拥有博士学位。虽然有些人是例外&#xff0c;但通常需要非常强大的教育背景才能拥有成为数据科学家所必需的知识深度。要想成为数据科学家&#xff0c;你可以先获得计算机科学、…

JAVA将ResultSet结果集遍历到List中

今天在使用jstl标签展示查询结果时遇到一个小问题&#xff0c;即如何将ResultSet对象传递给前台页面。 在默认情况中我们在使用数据库查询时 public List selectDataFromJdbc() throws SQLException, ClassNotFoundException {Class.forName("oracle.jdbc.driver.OracleD…

阿里敏捷教练:多团队开发一个产品的组织设计和思考

Scrum等敏捷开发框架&#xff0c;最初都是为5到9人的小团队设计的。通过保持专注和合理利用新技术&#xff0c;在相当长的时间里小团队仍然可以支撑业务发展。 随着业务成长&#xff0c;小团队的产出可能跟不上业务需要&#xff0c;团队就会面临规模化的问题。从1个团队拓展到…

10个你应该了解的Git命令(以及Git省时小窍门)

在本文中&#xff0c;我们将讨论那些作为开发人员、数据科学家或产品经理应该知道的各种各样的Git命令。并且将使用Git查看、删除和整理。此外&#xff0c;我们还将介绍如何使用Bash别名和Git编辑器配置转义Vim和节省时间的方法。 如果你不熟悉基本的git命令&#xff0c;那么在…

阿里工程师开发了一款免费工具,提升Kubernetes应用开发效率

对于使用了Kubernetes作为应用运行环境的开发者而言&#xff0c;在同一个集群中我们可以使用命名空间&#xff08;Namespace&#xff09;快速创建多套隔离环境&#xff0c;在相同命名空间下&#xff0c;服务间使用Service的内部DNS域名进行相互访问。 基于Kubernetes强大的隔离…

mongodb java spring_[Java教程]Spring 与 mongoDB 整合

[Java教程]Spring 与 mongoDB 整合02017-02-07 00:00:39首先需要引入jar包1 2 org.mongodb 3 mongodb-driver 4 3.3.0 5 6 7 org.springframework.data 8 spring-data-mongodb 9 1.9.4.RELEASE10 View Codespring中注入对象org.springframework.data.mongodb.core.MongoTemplat…

魔幻!过年在家,Java和Python程序员比工资打起来了...

Python真的野蛮生长到不行了&#xff1f;最近&#xff0c;笔者在某网站刷到一条信息&#xff0c;两个程序员在家比工资&#xff0c;竟然打起来了&#xff01;原因就是从事5年开发的Java程序员竟然工资输给了工作仅2年的Python程序员&#xff01;从上图招聘情况来了&#xff0c;…

Jmeter常用插件——梯度加压、响应时间、TPS_老版本

一、Jmeter梯度加压的jar Stepping Thread Group&#xff0c;下载方法如下&#xff1a; 1.访问网网站 https://jmeter-plugins.org/downloads/old/ 2.下载插件&#xff1a; 2.3.下载后需要解压 然后将JMeterPlugins-Standard.jar包放在jmeter安装目录的jmeter-3.0\lib\ext…

图解梯度下降背后的数学原理

敏捷在软件开发过程中是一个非常著名的术语&#xff0c;它背后的基本思想很简单&#xff1a;快速构建一些东西&#xff0c;然后得到一些反馈&#xff0c;根据反馈做出改变&#xff0c;重复此过程。目标是让产品更贴合用&#xff0c;让用户做出反馈&#xff0c;以获得设计开发出…

mysql数据迁移neo4j_neo4j数据库迁移---------Neo4j数据库导入导出的方法

Neo4j数据进行备份、还原、迁移的操作时&#xff0c;首先要关闭neo4j;/usr/share/neo4j/binneo4j stop如果出现Neo4j not running出现这种情况, Neo4j没有运行, 但是浏览器仍然可以访问neo4j数据库的情况, 直接执行导入数据后,是无法看到导入的数据库,其实这种情况下Neo4j仍在运…

rabbitmq配置文件字段spring.rabbitmq.publisher-confirms过时

spring.rabbitmq.publisher-confirms过时解决 在properties文件中确认消息报红 因为源码中过时配置级别设置了Error 新版本jar包配置换了就可以了 spring.rabbitmq.publisher-confirm-typecorrelated

如何利用 Webshell 诊断 EDAS Serverless 应用

本文主要介绍 Serverless 应用的网络环境以及 Serverless 应用容器内的环境&#xff0c;了解背景知识以及基本的运维知识后可以利用 Webshell 完成基本的运维需求。 Webshell 简介 用户可以通过阿里云控制台直接获取 ECS 的 Shell&#xff0c;从而完成自己的运维需求。如果 E…

刚刚,阿里云上线六大“战疫情”项目

作者 | Just出品 | CSDN云计算&#xff08;CSDNcloud&#xff09;抗击新冠肺炎&#xff0c;一线互联网大厂在行动。疫情发生以来&#xff0c;诸多科技公司都在思考如何利用技术来帮助抗击疫情&#xff0c;其中&#xff0c;阿里巴巴也是首当其冲。今天&#xff0c;阿里云上线了“…

MSSQL - 最佳实践 - 如何打码隐私数据列

摘要 在SQL Server安全系列专题月报分享中&#xff0c;我们已经分享了&#xff1a;如何使用对称密钥实现SQL Server列加密技术、使用非对称密钥加密方式实现SQL Server列加密、使用混合密钥实现SQL Server列加密技术、列加密技术带来的查询性能问题以及相应解决方案和行级别安…

springboot项目后台启动jar 和开机启动

注册服务&#xff0c;开机启动 添加服务 vim /etc/systemd/system/admin.service复制粘贴以下内容&#xff1a; [Unit] Descriptionconfig service Aftersyslog.target[Service] Typesimple ExecStart/usr/develop/java/jdk1.8.0_221/bin/java -jar -Xms3072m -Xmx3072m -X…

手把手教你使用TF服务将TensorFlow模型部署到生产环境

介绍 将机器学习&#xff08;ML&#xff09;模型应用于生产环境已成为一个火热的的话题,许多框架提供了旨在解决此问题的不同解决方案。为解决这一问题&#xff0c;谷歌发布了TensorFlow&#xff08;TF&#xff09;服务&#xff0c;以期待解决将ML模型部署到生产中的问题。 本…

一次搞定各种数据库SQL执行计划

作者 | 董旭阳TonyDong出品 | CSDN 博客执行计划&#xff08;execution plan&#xff0c;也叫查询计划或者解释计划&#xff09;是数据库执行 SQL 语句的具体步骤&#xff0c;例如通过索引还是全表扫描访问表中的数据&#xff0c;连接查询的实现方式和连接的顺序等。如果 SQL 语…

阿里云MVP北京闭门会圆满落幕 多把“利剑”助力开发者破阵蜕变

3月21日&#xff0c;北京国家会议中心&#xff0c;阿里云北京峰会吸引了全球计算机行业的目光。十年时间&#xff0c;阿里云开创中国云时代&#xff0c;研发了属于自己的云操作系统和城市AI平台&#xff0c;云普惠各行各业数百万客户。下一个十年&#xff0c;在阿里云战略升级为…