`
CoderDream
  • 浏览: 478672 次
  • 性别: 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文件压缩与解压缩实践,java解压缩zip文件,Java源码.zip

    在Java编程语言中,文件的压缩与解压缩是常见的操作,尤其在数据传输、存储优化以及备份场景下显得尤为重要。本实践主要关注如何使用Java来处理ZIP格式的压缩文件,以下将详细介绍相关知识点。 1. **Java档案API...

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

    本篇文章将深入探讨如何在Android平台上解决Java ZIP库在解压缩中文文件时出现的乱码问题。 首先,我们要明白乱码问题的根源。在文件的压缩和解压缩过程中,文件名通常被编码为字节序列,这个序列取决于原始文件名...

    java 解压缩zip文件

    本文将深入探讨如何使用Java API来解压缩ZIP文件,包括基本概念、核心类库以及具体实现步骤。 ZIP文件是一种广泛使用的文件归档格式,它可以将多个文件和目录组合成一个单一的可压缩文件,方便存储和传输。在Java中...

    java解压缩zip代码与用到的jar包

    以下是一个基本的Java代码示例,演示如何解压缩ZIP文件: ```java import java.io.*; import java.util.zip.*; public class UnzipExample { public static void unzip(String zipFilePath, String destDirectory...

    Java压缩/解压缩zip

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

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

    - **解压缩任务**:使用`unzip`任务可以解压缩Zip文件到指定的目标目录。 - **Ant脚本**:Ant通过XML格式的构建文件来定义任务,这使得整个过程可配置且易于自动化。 在实际应用中,如果你的项目依赖于这两个库,...

    zip带密码压缩解压缩工具类(java)

    本文将深入探讨如何使用`zip4j`库来实现带密码的ZIP文件压缩与解压缩,该库支持中文文件名,并且具有良好的密码保护功能。 `zip4j`是一个强大的Java库,它提供了丰富的API来处理ZIP文件,包括添加、删除、提取文件...

    zip 压缩 文件 Java

    解压缩ZIP文件则需要使用ZipInputStream,通过读取每一个ZipEntry并将其写入到目标位置。以下是一个基本的解压缩示例: ```java import java.io.*; import java.util.zip.*; public class UnzipFileExample { ...

    java zip压缩解压工具解决中文乱码问题

    在Java编程中,处理压缩和解压缩ZIP文件是一项常见的任务,尤其当文件中包含中文字符时,可能会遇到中文乱码的问题。这是因为Java的标准库在处理非ASCII编码时可能存在不足。本篇文章将详细介绍如何使用Java标准库...

    Java zip 压缩/解压源码

    在Java编程语言中,`zip`...通过`ZipFile`、`ZipOutputStream`和`ZipEntry`,我们可以方便地完成文件和目录的压缩与解压缩任务。在实际应用中,理解这些类的用法和交互对于编写高效、可靠的压缩/解压缩程序至关重要。

    java压缩文件解压缩和文件的压缩

    在Java编程语言中,处理...通过以上这些知识点,你可以构建一个强大的Java工具类,实现ZIP和RAR文件的压缩与解压缩,包括处理加密的ZIP文件。这个工具类可以是项目中一个可靠的助手,提高代码的可重用性和可维护性。

    Java压缩解压ZIP之Zip4j

    对于解压缩ZIP文件,`ZipFile`类也提供了`extractAll(String outputPath)`方法,可以将ZIP文件解压到指定的目录下。如果ZIP文件被加密,我们需要在解压前提供正确的密码。 ```java String outputFolder = "path/to/...

    javazip压缩类

    4. **Inflater**: 当从ZIP文件中解压缩数据时,使用Inflater类。它是InflaterInputStream的内部核心,负责解压缩由Deflater压缩的数据。通过将InflaterInputStream包装在FileInputStream上,我们可以读取ZIP文件中的...

    java 压缩/解压 .zip/.rar/.tar 文件

    本文将详细讲解如何使用Java API来压缩和解压缩`.zip`、`.rar`和`.tar`这三种常见的文件格式。 首先,对于`.zip`文件的处理,我们可以使用Apache的`commons-compress`库中的`ZipFile`和`ZipOutputStream`类。在提供...

    文件解压缩实现

    总结起来,文件解压缩实现涉及对zip文件格式的理解、使用Java的`java.util.zip`包以及正确处理文件流。通过`MyZip.java`这个文件,我们可以学习到如何在Java中进行文件的压缩和解压缩操作,这对于处理大量数据的项目...

    Java压缩技术(三) ZIP解压缩——Java原生实现

    测试可能包括创建ZIP文件并检查其完整性,解压缩ZIP文件并比较解压后的文件与原始文件的一致性等。测试对于确保压缩和解压缩过程的正确性至关重要。 在Java中,处理ZIP文件的另一种方式是使用`java.nio.file`包中的...

    Java压缩和解压缩zip文件

    本篇文章将详细探讨如何使用Java内置的类库来实现ZIP文件的压缩和解压缩,以及解决中文文件名出现乱码的问题。 首先,我们要了解Java中处理ZIP文件的核心类:`java.util.zip.ZipOutputStream` 和 `java.util.zip....

    将文件进行zip压缩并base64加密和解密

    解密时,先使用`Base64Util.decodeBase64StringToFile()`将BASE64字符串解码回ZIP文件,再使用相应的工具解压缩。 在实际开发中,这些工具类可以封装成一个完整的库,提供给其他部分代码使用。例如,你可以创建一个...

    zip4j压缩 加密 解压缩

    - **解压缩**:可以选择解压缩ZIP文件中的全部或部分文件,甚至可以直接解压到指定的目录。 ### 5. API使用示例 在代码中,可以使用`ZipFile`对象来操作ZIP文件,例如: ```java import ...

    java实现压缩解压缩

    对于ZIP文件的解压缩,我们使用`ZipInputStream`。创建一个`FileInputStream`指向ZIP文件,然后用`ZipInputStream`包装它。`getNextEntry`方法用于读取下一个条目,然后可以使用`BufferedReader`或`DataInputStream...

Global site tag (gtag.js) - Google Analytics