java zipfile用法_Java使用ZipFile类实现Zip文件解压

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工程结构图如下:

7ca7cc4cc5b73f11ab27b2aeace53d06.png

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值