类ZipInputStream读出ZIP文件序列(简单地说就是读出这个ZIP文件压缩了多少文件),而类ZipFile使用内嵌的随机文件访问机制读出其中的文件内容,所以不必顺序的读出ZIP压缩文件序列。
ZipInputStream和ZipFile之间另外一个基本的不同点在于高速缓冲的使用方面。当文件使用ZipInputStream和FileInputStream流读出的时候,ZIP条目不使用高速缓冲。然而,如果使用ZipFile(文件名)来打开文件,它将使用内嵌的高速缓冲,所以如果ZipFile(文件名)被重复调用的话,文件只被打开一次。缓冲值在第二次打开时使用。如果你工作在UNIX系统下,这是什么作用都没有的,因为使用ZipFile打开的所有ZIP文件都在内存中存在映射,所以使用ZipFile的性能优于ZipInputStream。然而,如果同一ZIP文件的内容在程序执行期间经常改变,或是重载的话,使用ZipInputStream就成为你的首选了。
下面显示了使用类ZipFile来解压一个ZIP文件的过程:
-
通过指定一个被读取的ZIP文件,或者是文件名,或者是一个文件对象来创建一个ZipFile对象:
ZipFile zipfile = new ZipFile("figs.zip");
-
使用entries方法,返回一个枚举对象,循环获得文件的ZIP条目对象:
while(e.hasMoreElements()) {
entry = (ZipEntry) e.nextElement();
// read contents and save them
}
-
ZIP条目作为参数传递给getInputStream方法,可以读取ZIP文件中指定条目的内容,能过其返回的输入流(InputStram)对象可以方便的读出ZIP条目的内容:
is = new BufferedInputStream(zipfile.getInputStream(entry));
-
获取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);
}
-
最后关闭所有的输入输出流
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;
}
}
分享到:
相关推荐
使用Java核心API实现单文件/多文件/整个目录的压缩/解压缩功能,由于自带API(1.6)不支持指定编码方式,因此中文会出现乱码(1.7貌似已经支持指定编码方式),所以还写了一个基于ant包的压缩/解压缩代码。
zip 压缩 文件 Java zip 压缩 文件 Java zip 压缩 文件 Java zip 压缩 文件 Java
解决android 自带zip解压缩中文乱码的问题,导入zip.jar即可使用(与系统提供的用法相同),大小仅24k
Java实现压缩与解压缩ZIP import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream;...
* @param zipFile 指定的ZIP压缩文件 * @param dest 解压目录 * @param passwd ZIP文件的密码 * @return 解压后文件数组 * @throws ZipException 压缩文件有损坏或者解压缩失败抛出 */ 方法详细见文件! 一个...
ZIP是一种较为常见的压缩形式,在Java中要想实现ZIP的压缩需要导入java.util.zip包,可以使用此包中的ZipFile、ZipOutputStream、ZipInputStream、ZipEntry几个类完成。 ZipOutputStream 实现文件的压缩 ...
通过学习可以理解压缩和解压缩的目的,并能使用Python的zipfile模块熟练进行ZIP解压缩操作,包括整体解压和逐个解压文件,为后续处理zip文件打下坚实基础。 阅读建议: 建议首先了解压缩和解压缩的基本概念,然后结合...
zip压缩以及解压工具类,本人纯手打。其中包括zip所需要的jar 文件,copy到项目中可直接运行,以及工具类添加注释
java 版的文件分割压缩 可以对大文件进行拆分。 文件大小可定义
使用 Java 语言实现并封装的创建 ZIP 格式的压缩文件并解压到指定目录和解压 ZIP 文件到指定目录的工具类。
python代码实现pj zip解压缩文件 zipfile是python里用来做zip格式编码的压缩和解压缩的,由于是很常见的zip格式,所以这个模块使用频率也是比较高的 zipfile里有两个非常重要的class, 分别是ZipFile和ZipInfo, 在绝...
zip4j默认采用UTF-8编码,所以它支持中文,同时也支持密码,而且支持多种压缩算法,可以说功能强大,但使用起来却非常简单,当然,如果需求比较复杂,那就得好好去研究了。如果你仅仅是简单地解压一个zip压缩文件,...
QuickUnzip可能是使用标准Java ZipFile API可以编写的最快的解压缩程序-在解压缩Eclipse Java开发发行版zipfile(Core i7-4702HQ CPU @ 2.20GHz,4核/ 8)时,其速度是InfoZip的两倍。线程,以及SSD)。 采取了...
使用ZLIB库 包装的压缩解压缩文件的源码 VS2005 工程创建 /* */ class ZIPWRAP_EXP CZipper { public: CZipper(); virtual ~CZipper(); // simple interface static bool ZipFile(const char* szFilePath...
* @param targetPath 解压缩到的位置,如果为null或空字符串则默认解压缩到跟zip包同目录跟zip包同名的文件夹下 * void */ public static void unzip(String zipFilePath, String targetPath) throws ...
在Java中通过ZipFile解析Android apk 压缩文件,获取版本号等信息,获取的manifest文件格式无法识别为xml,导致无法解析,该jar文件用来处理乱码文件,apk压缩文件解压缩乱码问题
java本身自带有zip格式的压缩解压api,但是对于含有中文的压缩文件无能为力,好在还有apache的ant可以解决zip文件的中文乱码问题。mucommander是一个可以支持zip、gzip、rar、tar、iso等格式的全能工具,这个包是...
将文件SrcFile添加到压缩文档ZipFile 参数 : SrcFile 待压缩文件(全路径) Zipfile 目标文件(全路径) 返回 : 失败 >0 成功 说明 : 同名文件将自动被替换(overwrite) 2. Function MyZip_AddDirectory...
java 实现指定目录下的文件打包zip格式 并指定存放zip包
net.lingala.zip4j.core.ZipFile_1.3.2.jar 解压缩zip,带解压进度