java.util.zip.ZipFile类用于从 ZIP 文件读取条目。 即从给定的ZIP压缩文件中获取所有文件的信息,如:文件的名称、是否为目录等信息。可以使用这个类来实现将zip文件进行解压操作。
ZipFile类的构造方法:ZipFile(File file)
使用给定的File对象打开一个Zip文件。ZipFile(File file, int mode)
打开新的 ZipFile 以使用指定模式从指定 File 对象读取。 其中有下面两种模式:
OPEN_DELETE 打开 ZIP 文件并将其标记为删除的模式标志。
OPEN_READ 打开 ZIP 文件进行阅读的模式标志。ZipFile(String name)
打开 ZIP 文件进行阅读。 该构造器内部使用name来构造一个File对象。代码如下:public ZipFile(String name, Charset charset) throws IOException {
this(new File(name), OPEN_READ, charset);
}
实例:使用ZipFile对象来解压给定的ZIP压缩文件,解压缩出来的文件和压缩前文件的目录结构一致。注意:目前不支持压缩文件中存在中文名称的文件。
Eclipase工程结构图如下:
Java代码如下:package com.bug315;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
/**
* 使用ZipFile类来对zip压缩文件进行解压操作(包括压缩文件的目录层次)
* @author admin
*
* 注意:目前测试在处理压缩文件中存在中文名称的文件会存在问题
*
*/
public class ZipFileTest01 {
public static void main(String[] args) {
ZipFile zipFile = null;
try {
zipFile = new ZipFile(new File("docs/test.zip"));
/**
* 基本信息输出
*/
System.out.println("压缩文件路径名称:" + zipFile.getName());
// 包含目录和文件
System.out.println("压缩文件中文件个数:" + zipFile.size());
// 返回压缩文件名称为”Test.java“的文件的ZipEntry对象
ZipEntry testEntry = zipFile.getEntry("Test.java");
System.out.println("Test.java文件的ZipEntry:" + testEntry.getSize() + "KB");
/**
* 遍历压缩文件中的所有文件
*/
Enumeration> entrys = zipFile.entries();
while ( entrys.hasMoreElements() ) {
/**
* 获取压缩文件中的文件,在Java中将每个文件使用ZipEntry进行表示
*/
ZipEntry entry = (ZipEntry)entrys.nextElement();
System.out.println("文件解压中…… " + entry.getName());
/**
* 如果获取的ZipEntry表示目录,则创建目录
*/
if ( entry.isDirectory() ) {
File tempFile = new File("docs/temp/" + entry.getName());
if ( !tempFile.exists() ) {
if ( !tempFile.mkdirs() ) {
throw new RuntimeException("创建目录结构失败:" + entry.getName());
}
}
}
/**
* 如果获取的ZipEntry表示文件,则将文件写出到相应的解压目录中
*/
else {
BufferedInputStream input = new BufferedInputStream(
zipFile.getInputStream(entry));
BufferedOutputStream output = new BufferedOutputStream(
new FileOutputStream("docs/temp/" + entry.getName()));
// 写出数据
int len = -1;
byte[] bytes = new byte[2048];
while ( (len = input.read(bytes)) != -1 ) {
output.write(bytes, 0, len);
}
output.close();
input.close();
}
}
} catch(Exception e) {
e.printStackTrace();
} finally {
if ( null != zipFile ) {
try {
zipFile.close();
zipFile = null;
} catch (IOException e) {
e.printStackTrace();
}
}
}
}//
}
输出结果:
压缩文件路径名称:docs\test.zip
压缩文件中文件个数:10
Test.java文件的ZipEntry:2636
文件解压中…… CalculatorMain.class
文件解压中…… Java6JVM.txt
文件解压中…… Test.java
文件解压中…… test/
文件解压中…… test/test-02/
文件解压中…… test/test-02/test-03/
文件解压中…… test/test-02/test-03/whatIs2.txt
文件解压中…… test/test-02/whatIs.txt
文件解压中…… test/whatIs.txt
文件解压中…… test.sql
在上面这个例子中,基本上把ZipFile类的所有方法都使用了。ZipFile更详细的资料请参考API文档。希望能够给你提供帮助……