正确的 zip 压缩与解压代码

网上流传的zip压缩与解压 的代码有非常大的问题 尽管使用了ant进行压缩与解压,可是任务的流程还是用的java.util.zip 的方式写的,我在使用的过程中遇到了压缩的文件夹结构有误,甚至出现不同解压软件显示的文件夹结构不同的窘境。

以下给出使用org.apache.tools.ant.taskdefs.Zip;和org.apache.tools.ant.taskdefs.Expand 的压缩和解压过程。

import java.io.File;import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.taskdefs.Expand;
import org.apache.tools.ant.taskdefs.Zip;
import org.apache.tools.ant.types.FileSet;public class Zipper {public final static String encoding = "GBK";// 压缩public static void zip(String srcPathname, String zipFilepath)throws BuildException, RuntimeException {File file = new File(srcPathname);if (!file.exists())throw new RuntimeException("source file or directory "+ srcPathname + " does not exist.");Project proj = new Project();FileSet fileSet = new FileSet();fileSet.setProject(proj);// 推断是文件夹还是文件if (file.isDirectory()) {fileSet.setDir(file);// ant中include/exclude规则在此都能够使用// 比方:// fileSet.setExcludes("**/*.txt");// fileSet.setIncludes("**/*.xls");} else {fileSet.setFile(file);}Zip zip = new Zip();zip.setProject(proj);zip.setDestFile(new File(zipFilepath));zip.addFileset(fileSet);zip.setEncoding(encoding);zip.execute();}// 解压缩public static void unzip(String zipFilepath, String destDir)throws BuildException, RuntimeException {if (!new File(zipFilepath).exists())throw new RuntimeException("zip file " + zipFilepath+ " does not exist.");Project proj = new Project();Expand expand = new Expand();expand.setProject(proj);expand.setTaskType("unzip");expand.setTaskName("unzip");expand.setEncoding(encoding);expand.setSrc(new File(zipFilepath));expand.setDest(new File(destDir));expand.execute();}public static void main(String []args){unzip("D:\\123.zip","D:\\123");zip("D:\\upload","D:\\upload.zip");}
}


 

转载于:https://www.cnblogs.com/mfrbuaa/p/3864774.html

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

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

相关文章

String和STL的一些基础知识

一.STL(标准模板库)的六大组件:容器,算法,迭代器,仿函数,适配器(配接器),空间配置器 1.容器:各种数据结构,vector,list,deque,unordered_set; 2.…

机器学习如何借鉴人类的视觉识别学习?让我们从婴幼儿的视觉学习说起

来源:AI科技评论当只需要把大规模标注图像数据库塞给深度神经网络就可以得到高准确率的物体分类模型之后,有很多研究人员开始考虑更深入的问题:人类的视觉识别学习过程是怎样的?以及既然人类视觉系统与计算机视觉系统之间表现出了…

ggplot2绘图入门系列之四:再说散点图

1 色彩和形状的控制 数据特征不仅可以用坐标来表示,也可以用不同的色彩或形状来表示。仍以mpg数据集为例,所用到的变量有cty(城市中行驶距离),hwy(高速路行驶距离),displ(排量大小),…

2019年物联网发展的六大趋势

来源:资本实验室摘要:在人类发展史上,通讯技术的每次革命性突破,都会让我们离完全的数字化社会越来越近。当现金变成微信和支付宝;当逛商场变成逛淘宝;当叫出租车变成叫滴滴;当“您好”变成“您…

exec函数簇

exec一共有六种函数,都是以exec开头。 1 int execl(const char *path, const char *arg, ...); 2 int execlp(const char *file, const char *arg, ...); 3 int execle(const char *path, const char *arg, ..., char * const envp[]); 4 int execv(const char *pat…

gdb基础知识

文档 一.gdb打印demo.cpp运行结果 在CMakeLists.txt中添加 set(CMAKE_BUILD_TYPE Debug) 然后make以后通过gdb filename进入该文件的gdb调试模式,同时使用shell 就可以像终端一样使用shell命令。 例子: demo.cpp #include <iostream> #include <vector> #i…

重磅!罗振宇跨年演讲:扎心5问

来源&#xff1a;亿欧网摘要&#xff1a;我们不断追问“这个世界到底是什么样子的&#xff1f;”今年罗振宇在“2018时间的朋友跨年演讲”中给出的解题思路是&#xff1a;小趋势。2018年12月31日晚&#xff0c;“2018时间的朋友跨年演讲”在深圳春茧体育馆拉开帷幕。从4000人的…

C++ opencv的一些基础知识

一&#xff0e;基础知识 1.cv::mat type返回数字对应的类型 C1, C2, C3, C4 指的是通道(Channel)数&#xff0c;比如3通道的float 32&#xff1a; cv::Mat M5 cv::Mat::zeros(2, 3, CV_32FC(3)); 2.at方法数据类型 知道通道数和每个通道数据类型的情况下&#xff0c;指定给…

centos 6.5 x64编译有python的vim7.4

wget ftp://ftp.vim.org/pub/vim/extra/vim-7.2-extra.tar.gzwget ftp://ftp.vim.org/pub/vim/extra/vim-7.2-lang.tar.gzwget ftp://ftp.vim.org/pub/vim/unix/vim-7.4.tar.bz2 下载后&#xff0c;解压 tar jxf vim-7.4.tar.bz2tar zxf vim-7.2-extra.tar.gztar zxf vim-7.2-l…

难以想象!未来十年,颠覆性技术将带来这些社会变革……

作者&#xff1a;张一清来源&#xff1a;财新《中国改革》摘要&#xff1a;技术飞速进步改变生活&#xff0c;人类是否准备好迎接它们给生活、制度和文化带来的挑战&#xff1f;现代社会&#xff0c;技术的更新速度永远比你想得更快。当感叹技术的飞速进步&#xff0c;当憧憬技…

硬件工程师电路设计必须紧记的十大要点

一、电源是系统的血脉&#xff0c;要舍得成本&#xff0c;这对产品的稳定性和通过各种认证是非常有好处的。1.尽量采用∏型滤波&#xff0c;增加10uH电感&#xff0c;每个芯片电源管脚要接104旁路电容;2.采用压敏电阻或瞬态二极管&#xff0c;抑制浪涌&#xff1b;3.模电和数电…

C++模板的一些基础知识

一.函数模板 可看出就是将函数返回类型和形参类型去掉。 1.代码1 #include <iostream> #include <vector> #include <string> #include <algorithm> #include <map> #include <fstream> using namespace std;template<typename T>…

芯片热!价格战!争落地!2018年人工智能发展回忆录

来源&#xff1a;网易智能摘要&#xff1a;2018年是非同寻常的一年&#xff0c;对于人工智能行业而言更是如此。在这一年&#xff0c;几乎所有科技公司宣布全面拥抱AI&#xff0c;在这一年&#xff0c;巨头深入布局&#xff0c;挤压着创业者的想象空间&#xff0c;在这一年&…

如何附加数据库

转载于:https://www.cnblogs.com/tanqianqian/p/5975072.html

a16z基金:顶级风投眼中的2019技术趋势

来源&#xff1a;资本实验室位于硅谷的顶级风险投资公司——安德森霍洛维兹基金&#xff08;Andreessen Horowitz&#xff0c;简称a16z&#xff09;在近期提出了他们将在2019年遵循的五大技术趋势&#xff0c;涉及生物医疗、数字货币与区块链、人工智能等技术领域。从字面上来看…

CXF 调用C#.net的WebService

原文链接&#xff1a;http://hi.baidu.com/pengfeiiw/blog/item/3203e29065aa3a8aa977a4d0.html 1.编写C#.net的WebService Service.cs using System;using System.Web;using System.Web.Services;using System.Web.Services.Protocols; [WebService(Namespace "http://l…

新算力下的2019 AI

来源&#xff1a;乐晴智库精选▌AI步入下半场IT每十年一阶段形成六大阶段每一轮科技革命都会带来新的赢家基础设施—通用平台—应用层的发展路径每一轮科技革命均印证基础设施先行的发展路径基础设施与通用平台易形成寡头垄断应用层的发展愈来愈依托于生态云计算厂商的资本开支…

leetcode动态规划(python与c++)

1 . 斐波那契数 class Solution:def fib(self, n: int) -> int:# if n0:# return 0# elif n1:# return 1# else:# return self.fib(n-1)self.fib(n-2)a 0b 1for i in range(n):a,b b,abreturn a class Solution { public:int fib(int n) {int a 0, b 1;fo…

CSDN之人人code,整数取反

题目描述&#xff1a;要求实现把给定的一个整数取其相反数的功能&#xff0c;举两个例子如下&#xff1a;x 123, return 321 x -123, return -321&#xff1b; 解题思路&#xff1a;对int a进行判断&#xff0c;如果a的大小不等于0&#xff1b;则定义一个变量temp等于temp*10…

算法总结之欧拉函数中国剩余定理

算法总结之欧拉函数&中国剩余定理 1.欧拉函数 概念&#xff1a;在数论&#xff0c;对正整数n&#xff0c;欧拉函数是少于或等于n的数中与n互质的数的数目。 通式&#xff1a;φ(x)x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…..(1-1/pn) 其中p1, p2……pn为x的所有质因数&#xf…