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 est.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文档。希望能够给你提供帮助……