设为首页 收藏本站
查看: 605|回复: 0

[经验分享] Apache Ant包进行ZIP文件压缩

[复制链接]

尚未签到

发表于 2017-1-4 09:24:16 | 显示全部楼层 |阅读模式
  Apache Ant包进行ZIP文件压缩
  许多年前就遇到过这种业务,对ZIP标准压缩文件解压。之前写的操作类现在找不到了,最近项目中又要处理这种业务,所以重新写了一个。Java提供了处理ZIP包的API。但是对中文支持不是很好,所以我直接用Apache Ant里的ZIP操作API来进行处理。ANT的API解决了中文支持问题,而且用起来也非常方便。以下是操作类。
  以下的类只是用到Apache的一小部分功能。具体更多的API,请参考文档。在此不多说明了。
  * 在项目中导入Apache的ant.jar包到Lib中。

/*
* All rights reserved.
* @author: JODY
* @Date: 2008-05-27
* @Time: 0:15:04
*/
package cn.com.jody.util;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import org.apache.tools.zip.ZipEntry;
/*
* <p>
* 功能描述 标准ZIP文件解压缩<br>
* 支持中文目录、文件名<br>
* 无限级目录结构
* </p>
* 文件名称:ExtractZIP.java<br>
* 类型名称:ExtractZIP<br>
* @author: JODY
*/
public class ExtractZIP {
public ExtractZIP(){
}
/**
* 解压静态方法
* @param zipFileName
* @param outputDirectory
* @throws Exception
*/
public static void extract(String zipFileName,String outputDirectory) throws Exception{
try {
org.apache.tools.zip.ZipFile zipFile = new org.apache.tools.zip.ZipFile(zipFileName);
java.util.Enumeration e = zipFile.getEntries();
org.apache.tools.zip.ZipEntry zipEntry = null;
while (e.hasMoreElements()){
zipEntry = (ZipEntry)e.nextElement();
//System.out.println("unziping "+zipEntry.getName());
if (zipEntry.isDirectory()){
String name=zipEntry.getName();
name=name.substring(0,name.length()-1);
mkDirs(outputDirectory+File.separator+name);
//System.out.println("创建目录:"+outputDirectory+File.separator+name);
}else{
String name=zipEntry.getName();
String dir = name.substring(0,name.lastIndexOf("/"));
mkDirs(outputDirectory+File.separator+dir);
//System.out.println("创建文件:"+outputDirectory+File.separator+name);
File f=new File(outputDirectory+File.separator+zipEntry.getName());
f.createNewFile();
InputStream in = zipFile.getInputStream(zipEntry);
FileOutputStream out=new FileOutputStream(f);
int c;
byte[] by=new byte[1024];
while((c=in.read(by)) != -1){
out.write(by,0,c);
}
out.close();
in.close();
}
}
}
catch (Exception ex){
System.out.println("解压文件异常"+ex.getMessage());
ex.printStackTrace();
}
}
/**
* 创建目录,包括子目录
* @param dir
* @throws Exception
*/
private static void mkDirs(String dir) throws Exception{
if(dir == null || dir.equals("")) return;
File f1 = new File(dir);
if(!f1.exists())
f1.mkdirs();
}

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
extract("D:\\开源项目\\apache\\新建文件夹.zip", "D:\\开源项目\\apache\\aa");
} catch (Exception e) {
e.printStackTrace();
}
}
}

  以上代码已经测试通过,支持中文目录、文件名,不限目录级别。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-323601-1-1.html 上篇帖子: apache和tomcat集成的总结 下篇帖子: Windows下配置基于Apache的SVN
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表