`
CoderDream
  • 浏览: 471424 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Java API 压缩与解压缩之二 使用ZipFile解压缩Zip文档

阅读更多

类ZipInputStream读出ZIP文件序列(简单地说就是读出这个ZIP文件压缩了多少文件),而类ZipFile使用内嵌的随机文件访问机制读出其中的文件内容,所以不必顺序的读出ZIP压缩文件序列。
  
ZipInputStream和ZipFile之间另外一个基本的不同点在于高速缓冲的使用方面。当文件使用ZipInputStream和FileInputStream流读出的时候,ZIP条目不使用高速缓冲。然而,如果使用ZipFile(文件名)来打开文件,它将使用内嵌的高速缓冲,所以如果ZipFile(文件名)被重复调用的话,文件只被打开一次。缓冲值在第二次打开时使用。如果你工作在UNIX系统下,这是什么作用都没有的,因为使用ZipFile打开的所有ZIP文件都在内存中存在映射,所以使用ZipFile的性能优于ZipInputStream。然而,如果同一ZIP文件的内容在程序执行期间经常改变,或是重载的话,使用ZipInputStream就成为你的首选了。

    下面显示了使用类ZipFile来解压一个ZIP文件的过程:

  1. 通过指定一个被读取的ZIP文件,或者是文件名,或者是一个文件对象来创建一个ZipFile对象:

    ZipFile zipfile = new ZipFile("figs.zip"); 
  2. 使用entries方法,返回一个枚举对象,循环获得文件的ZIP条目对象:

    while(e.hasMoreElements()) { 
        entry = (ZipEntry) e.nextElement(); 
        // read contents and save them 
    }
  3. ZIP条目作为参数传递给getInputStream方法,可以读取ZIP文件中指定条目的内容,能过其返回的输入流(InputStram)对象可以方便的读出ZIP条目的内容:

    is = new BufferedInputStream(zipfile.getInputStream(entry)); 
  4. 获取ZIP条目的文件名,创建输出流,并保存:

    byte data[] = new byte[BUFFER]; 
    FileOutputStream fos = new FileOutputStream(entry.getName()); 
    dest = new BufferedOutputStream(fos, BUFFER); 
    while ((count = is.read(data, 0, BUFFER)) != -1) { 
        dest.write(data, 0, count); 
    } 
  5. 最后关闭所有的输入输出流

    dest.flush(); 
    dest.close(); 
    is.close(); 


完整代码:

public class UnZip2 {
	static final int BUFFER = 2048;
	public static void main(String argv[]) {
		String fileName = "c:/testlog.zip";
		String unZipDir = "c:/2/2/";
		unZip(fileName, unZipDir);
	}

	public static void unZip(String fileName, String unZipDir) {

		try {
			// 先判断目标文件夹是否存在,如果不存在则新建,如果父目录不存在也新建
			File f = new File(unZipDir);
			if (!f.exists()) {
				f.mkdirs();
			}

			BufferedOutputStream dest = null;
			BufferedInputStream is = null;
			ZipEntry entry;
			ZipFile zipfile = new ZipFile(fileName);
			Enumeration e = zipfile.entries();
			while (e.hasMoreElements()) {
				entry = (ZipEntry) e.nextElement();
				System.out.println("Extracting: " + entry);
				is = new BufferedInputStream(zipfile.getInputStream(entry));
				int count;
				byte data[] = new byte[BUFFER];
				FileOutputStream fos = new FileOutputStream(unZipDir + "/"
						+ entry.getName());
				System.out.println("entry.getName(): " + entry.getName());
				dest = new BufferedOutputStream(fos, BUFFER);
				while ((count = is.read(data, 0, BUFFER)) != -1) {
					dest.write(data, 0, count);
				}
				dest.flush();
				dest.close();
				is.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static boolean makeDir(String unZipDir) {
		boolean b = false;
		try {
			File f = new File(unZipDir);
			if (!f.exists()) {
				b = f.mkdirs();
			}
		} catch (Exception e) {
			e.printStackTrace();
			return b;
		}
		return b;
	}
}
 
分享到:
评论
4 楼 mowenzheng 2009-01-12  
提示:选择您需要装饰的文字, 按上列按钮即可添加上相应的标签     择您需要装饰的文字, 按上列按钮即可添加上相应的标签                    
提示:选择您需要装饰的文字, 按上列按钮即可添加上相应的标签
表情图标
发表评论


运行错误!
3 楼 mowenzheng 2009-01-12  
[/color]
  • [color=orange]
引用
引用
  • aaaa
[/size]            [size=medium][color=yellow][/color]
[/url][flash=200,200]" wmode="" quality="high" menu="false" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="200" height="200">[url]
引用
引用
[b][/b]
2 楼 mowenzheng 2009-01-12  
[color=cyan][/color]
引用
引用
[/u][/b]
[url][/url][img][/img]
引用
引用
[i][/i][b]
[u]
引用
fos
1 楼 jy02411368 2008-11-04  
运行错误!

相关推荐

    Java压缩/解压缩zip

    使用Java核心API实现单文件/多文件/整个目录的压缩/解压缩功能,由于自带API(1.6)不支持指定编码方式,因此中文会出现乱码(1.7貌似已经支持指定编码方式),所以还写了一个基于ant包的压缩/解压缩代码。

    zip 压缩 文件 Java

    zip 压缩 文件 Java zip 压缩 文件 Java zip 压缩 文件 Java zip 压缩 文件 Java

    java android zip解压缩(解决压缩中文乱码问题)

    解决android 自带zip解压缩中文乱码的问题,导入zip.jar即可使用(与系统提供的用法相同),大小仅24k

    java算法,实现压缩及解压缩

    Java实现压缩与解压缩ZIP  import java.io.BufferedInputStream;  import java.io.BufferedOutputStream;  import java.io.File;  import java.io.FileInputStream;  import java.io.FileOutputStream;...

    java压缩文件生成带密码的zip包,解压带密码的zip包的工具类

    * @param zipFile 指定的ZIP压缩文件 * @param dest 解压目录 * @param passwd ZIP文件的密码 * @return 解压后文件数组 * @throws ZipException 压缩文件有损坏或者解压缩失败抛出 */ 方法详细见文件! 一个...

    JAVA文件压缩与解压缩的设计与实现(源代码+论文)

    ZIP是一种较为常见的压缩形式,在Java中要想实现ZIP的压缩需要导入java.util.zip包,可以使用此包中的ZipFile、ZipOutputStream、ZipInputStream、ZipEntry几个类完成。 ZipOutputStream 实现文件的压缩 ...

    Python解压缩zip文件原理与实践笔记.md

    通过学习可以理解压缩和解压缩的目的,并能使用Python的zipfile模块熟练进行ZIP解压缩操作,包括整体解压和逐个解压文件,为后续处理zip文件打下坚实基础。 阅读建议: 建议首先了解压缩和解压缩的基本概念,然后结合...

    zip压缩java工具类包含jar文件

    zip压缩以及解压工具类,本人纯手打。其中包括zip所需要的jar 文件,copy到项目中可直接运行,以及工具类添加注释

    java文件分割压缩

    java 版的文件分割压缩 可以对大文件进行拆分。 文件大小可定义

    使用 Java 实现的压缩/解压 ZIP 文件的工具类

    使用 Java 语言实现并封装的创建 ZIP 格式的压缩文件并解压到指定目录和解压 ZIP 文件到指定目录的工具类。

    python代码实现pj zip解压缩文件

    python代码实现pj zip解压缩文件 zipfile是python里用来做zip格式编码的压缩和解压缩的,由于是很常见的zip格式,所以这个模块使用频率也是比较高的 zipfile里有两个非常重要的class, 分别是ZipFile和ZipInfo, 在绝...

    net.lingala.zip4j.core.ZipFile_1.3.2.jar 解压缩zip,带解压进度

    zip4j默认采用UTF-8编码,所以它支持中文,同时也支持密码,而且支持多种压缩算法,可以说功能强大,但使用起来却非常简单,当然,如果需求比较复杂,那就得好好去研究了。如果你仅仅是简单地解压一个zip压缩文件,...

    quickunzip:用Java编写的快速并行解压缩

    QuickUnzip可能是使用标准Java ZipFile API可以编写的最快的解压缩程序-在解压缩Eclipse Java开发发行版zipfile(Core i7-4702HQ CPU @ 2.20GHz,4核/ 8)时,其速度是InfoZip的两倍。线程,以及SSD)。 采取了...

    ZIP 压缩 解压缩 源码

    使用ZLIB库 包装的压缩解压缩文件的源码 VS2005 工程创建 /* */ class ZIPWRAP_EXP CZipper { public: CZipper(); virtual ~CZipper(); // simple interface static bool ZipFile(const char* szFilePath...

    org.apache.tools.zip解决解压乱码问题

    * @param targetPath 解压缩到的位置,如果为null或空字符串则默认解压缩到跟zip包同目录跟zip包同名的文件夹下 * void */ public static void unzip(String zipFilePath, String targetPath) throws ...

    axml.zip apk压缩文件解压缩乱码问题

    在Java中通过ZipFile解析Android apk 压缩文件,获取版本号等信息,获取的manifest文件格式无法识别为xml,导致无法解析,该jar文件用来处理乱码文件,apk压缩文件解压缩乱码问题

    java下的rar、zip等压缩、解缩工具

    java本身自带有zip格式的压缩解压api,但是对于含有中文的压缩文件无能为力,好在还有apache的ant可以解决zip文件的中文乱码问题。mucommander是一个可以支持zip、gzip、rar、tar、iso等格式的全能工具,这个包是...

    zipfile.dll或者myzip.dll的下载解压缩dll

    将文件SrcFile添加到压缩文档ZipFile 参数 : SrcFile 待压缩文件(全路径) Zipfile 目标文件(全路径) 返回 : 失败 >0 成功 说明 : 同名文件将自动被替换(overwrite) 2. Function MyZip_AddDirectory...

    java 实现指定目录下的文件打包zip格式 并指定存放zip包

    java 实现指定目录下的文件打包zip格式 并指定存放zip包

    net.lingala.zip4j.core.ZipFile_1.3.2.jar

    net.lingala.zip4j.core.ZipFile_1.3.2.jar 解压缩zip,带解压进度

Global site tag (gtag.js) - Google Analytics