`
kyo19
  • 浏览: 73544 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

Apache Ant包进行ZIP文件压缩

    博客分类:
  • java
阅读更多

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 楼 hyj0903 2011-03-16  
居然又很奇怪的可以了!

相关推荐

    apache-ant-zip-2.3.jar.zip

    Apache Ant Zip 2.3.jar 是一个用于构建和管理Java项目的工具,它是Apache Ant库的一部分。Ant是一个由Apache软件基金会开发的任务驱动的构建系统,它使用XML来描述构建过程和依赖关系,使得构建过程可移植且易于...

    apache-ant-1.6.5-bin.zip_ ant 1.6.5_ant_ant-1.6.5_apache ant win

    Apache Ant 是一个开源的构建工具,广泛用于Java项目构建,由Apache软件基金会开发。这个"apache-ant-1.6.5-bin.zip"文件是Ant的1.6.5版本的二进制发行版...详细的使用方法和特性可通过提供的readme.txt文件进行查阅。

    apache-ant-zip.jar包及用法

    apache-ant-zip.jar包及用法 用过java做压缩或解压的都知道,jdk提供的zip只能按UTF-8格式处理,所有jdk提供的zip不能支持中文文件名,可以采用Apache的zip包解决中文文件名问题。

    apache-ant-1.9.9.zip

    标题中的"apache-ant-1.9.9.zip"表明这是一个包含Apache Ant 1.9.9版本的压缩文件,适合在Mac终端上使用,并且已经过实际测试,确保了其兼容性和易用性。 Apache Ant的核心概念是任务(Task),这些任务是构建过程...

    利用ant.jar解压缩zip包

    总的来说,利用Apache Ant的ant.jar库,无论是通过Java代码还是Ant构建文件,都能方便、高效地解压缩ZIP文件,而且对于包含中文文件名的情况,它提供了良好的支持。在实际开发中,理解并熟练运用这类工具可以极大地...

    利于apache提供的ant包压缩文件

    在给定的“利于apache提供的ant包压缩文件”主题中,我们可以深入探讨Ant在处理文件压缩方面的功能。 1. **Ant介绍**: Apache Ant是Apache软件基金会的一个项目,它起源于Jakarta项目,旨在替代Make工具,成为...

    apache ant zip 包 1.8.0 (含api)

    总结起来,Apache Ant提供了解决Java标准库在处理ZIP文件中文问题的方法,通过设置`encoding`属性,用户可以在创建和管理ZIP文件时正确处理各种编码,尤其是对于包含中文的文件名。这个特性使得Ant成为Java开发环境...

    apache-ant-zip-2.3.jar

    ApacheAnt是一个Java库与命令行工具,用于驱动描述在构建文件中作为互相依赖的目标与扩展点的流程。 Ant的一个主要的一致用途是构建Java应用。apache-ant-zip-2.3.jar 是 Apache Ant 的一个组件,用于处理 ZIP 文件...

    apache-ant-zip.jar

    Java自带的解压缩不支持中文路径,此开发包支持中文的解压缩

    ant-1.7.1(org.apache.tools.zip.ZipOutputStream).zip

    这个版本包含了对Zip文件格式的支持,其中`org.apache.tools.zip.ZipOutputStream`是Ant用来创建Zip压缩文件的核心类。在处理中文文件名时,可能会遇到乱码问题,这是由于字符编码不一致所导致的。 描述中提到的...

    apache官方ant-1.10.11版本压缩包

    描述中的"全名:apache-ant-1.10.11-bin.zip"提示我们这是一个可执行的二进制发行版,通常包含运行Ant所需的全部文件,如jar包、脚本和其他资源。".zip"后缀表示这是一个压缩文件,需要先解压才能使用其中的内容。 ...

    apache zip压缩类和jar包 集合

    Apache Zip压缩类和Apache Ant Jar包是Java开发中常用的工具,它们在处理文件打包和压缩方面发挥着重要作用。Apache Commons Compress库提供了对多种压缩格式的支持,包括ZIP,而Apache Ant是一个基于Java的任务驱动...

    java-maven-apache-ant-zip-2.3-jar包依赖

    总结起来,`java-maven-apache-ant-zip-2.3-jar包依赖`是指在Java项目中,通过Maven管理Apache Ant ZIP任务的2.3版本,为项目提供便捷的ZIP文件操作能力。开发者可以通过正确配置Maven的pom.xml文件,确保这个依赖...

    java 操作Zip文件(压缩、解压、加密).zip

    Java操作Zip文件主要涉及到对文件和目录的压缩与解压缩,以及在必要时对压缩文件进行加密处理。这里我们重点讨论使用两个库:`zip4j`和`Apache Ant`来实现这些功能。 1. **zip4j库**:`zip4j-1.3.2.jar`是一个用...

    apache-ant-1.10.5.rar

    在标题中提到的"apache-ant-1.10.5.rar"是一个包含Ant 1.10.5版本的压缩文件。这个版本的Ant是在2019年发布的一个稳定版本,它提供了许多新特性和改进,使得开发者能够更高效地管理他们的Java项目。 Ant主要基于XML...

    apache 解压zip文件

    Apache Ant是一个广泛使用的Java构建...总的来说,Apache Ant通过提供灵活且可扩展的任务集,使开发者能够轻松地处理各种构建任务,包括解压ZIP文件。了解如何配置和使用Ant,可以帮助提高Java开发的效率和自动化程度。

    org.apache.tools.zip.*文件打包需要的jar包

    import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipFile; import org.apache.tools.zip.ZipOutputStream;...需要的jar包,压缩zip包和解压zip包,远程打包,文件批量下载、文件批量上传

    apache-ant-1.9.7-bin.zip

    标题中的"apache-ant-1.9.7-bin.zip"指的是Apache Ant的1.9.7版本的二进制发行版,通常包含所有运行Ant所需的可执行文件和库。 描述中的重复内容可能是个错误,但我们可以理解为对Apache Ant的强调。Apache Ant ...

    ant操作7zip压缩、解压 tar.gz

    7-Zip提供了命令行工具7z.exe,可以方便地对文件进行压缩和解压。对于tar.gz文件,7-Zip会先解压gz格式,然后处理tar归档。要解压一个名为"example.tar.gz"的文件,可以在命令行输入以下命令: ```shell 7z x ...

    ant-zip-1.7.1.jar.zip

    总的来说,"ant-zip-1.7.1.jar.zip"是一个包含Apache Ant ZIP任务实现的压缩文件,便于开发者在Java项目中进行ZIP文件的操作。同时,提供的许可文件确保了合法合规的使用。在实际应用中,开发者会将这个JAR文件添加...

Global site tag (gtag.js) - Google Analytics