Java使用ZipFile类实现Zip文件解压

java.util.zip.ZipFile类用于从 ZIP 文件读取条目。 即从给定的ZIP压缩文件中获取所有文件的信息,如:文件的名称、是否为目录等信息。可以使用这个类来实现将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工程结构图如下:

java zip解压缩图片

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

一寸光阴一寸金,寸金难买寸光阴。——《增广贤文》
1 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
其他应用
公众号