`

JAVA基础篇【工具类】ZipUtil zip工具类 TG【20130318整理】

阅读更多



import java.io.BufferedInputStream;  
import java.io.BufferedOutputStream;  
import java.io.File;  
import java.io.FileInputStream;  
import java.io.FileOutputStream;  
import java.io.IOException;  
import java.io.InputStream;  
import java.io.OutputStream;  
import java.util.Enumeration;  
  
import org.apache.commons.compress.archivers.zip.Zip64Mode;  
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;  
import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;  
import org.apache.commons.compress.archivers.zip.ZipFile;  
import org.apache.commons.compress.utils.IOUtils;  
  
/** 
 * Zip工具栏类,依赖于commons-compress-1.5.jar。 
 *  
 * @author Elfy
 * @date 2013年02月25日 
 */  
public class ZipUtil {  
  
    // public static void main(String[] args){  
    // try {  
    // //new ZipUtil().decompressZip(new  
    // File("d://img.zip"),"img/pic20140626.jpg","d://");  
    // new ZipUtil().decompressZip(new File("d://img.zip"),"flight.log","d://");  
    // //new File("d://flight.log").delete();  
    // //ZipUtil.compress(new File("D://测试压缩文件"),new File("d://img.zip"));  
    // // ZipUtil.compress(new File[]{new  
    // File("F:/testZIP/testzip.txt"),new File("d://ftp"),new  
    // File("e://ftp")},new File("d://压缩文件.zip"));  
    // } catch (IOException e) {  
    // e.printStackTrace();  
    // }  
    // }  
  
    /** 
     * 把N多文件或文件夹压缩成zip。 
     *  
     * @param files 
     *            需要压缩的文件或文件夹。 
     * @param zipFilePath 
     *            压缩后的zip文件 
     * @throws IOException 
     *             压缩时IO异常。 
     * @author Elfy
     * @date 2013年02月25日 
     */  
    public static void compress(File[] files, File zipFile) throws IOException {  
        if (CollectionUtil.isEmpty(files)) {  
            return;  
        }  
        ZipArchiveOutputStream out = new ZipArchiveOutputStream(zipFile);  
        out.setUseZip64(Zip64Mode.AsNeeded);  
        // 将每个文件用ZipArchiveEntry封装  
        for (File file : files) {  
            if (file == null) {  
                continue;  
            }  
            compressOneFile(file, out, "");  
        }  
        if (out != null) {  
            out.close();  
        }  
    }  
  
    /** 
     * 功能:压缩文件或文件夹。 
     *  
     * @author Elfy
     * @date 2013年02月25日 
     * @param srcFile 
     *            源文件。 
     * @param destFile 
     *            压缩后的文件 
     * @throws IOException 
     *             压缩时出现了异常。 
     */  
    public static void compress(File srcFile, File destFile) throws IOException {  
        ZipArchiveOutputStream out = null;  
        try {  
            out = new ZipArchiveOutputStream(new BufferedOutputStream(  
                    new FileOutputStream(destFile), 1024));  
            compressOneFile(srcFile, out, "");  
        } finally {  
            out.close();  
        }  
    }  
  
    /** 
     * 功能:压缩单个文件,非文件夹。私有,不对外开放。 
     *  
     * @author Elfy
     * @date 2013年02月25日  
     * @param srcFile 
     *            源文件,不能是文件夹。 
     * @param out 
     *            压缩文件的输出流。 
     * @param destFile 
     *            压缩后的文件 
     * @param dir 
     *            在压缩包中的位置,根目录传入/。 
     * @throws IOException 
     *             压缩时出现了异常。 
     */  
    private static void compressOneFile(File srcFile,  
            ZipArchiveOutputStream out, String dir) throws IOException {  
        if (srcFile.isDirectory()) {// 对文件夹进行处理。  
            ZipArchiveEntry entry = new ZipArchiveEntry(dir + srcFile.getName()  
                    + "/");  
            out.putArchiveEntry(entry);  
            out.closeArchiveEntry();  
            // 循环文件夹中的所有文件进行压缩处理。  
            String[] subFiles = srcFile.list();  
            for (String subFile : subFiles) {  
                compressOneFile(new File(srcFile.getPath() + "/" + subFile),  
                        out, (dir + srcFile.getName() + "/"));  
            }  
        } else { // 普通文件。  
            InputStream is = null;  
            try {  
                is = new BufferedInputStream(new FileInputStream(srcFile));  
                // 创建一个压缩包。  
                ZipArchiveEntry entry = new ZipArchiveEntry(srcFile, dir  
                        + srcFile.getName());  
                out.putArchiveEntry(entry);  
                IOUtils.copy(is, out);  
                out.closeArchiveEntry();  
            } finally {  
                if (is != null)  
                    is.close();  
            }  
        }  
    }  
  
    /** 
     * 功能:解压缩zip压缩包下的所有文件。 
     *  
     * @author Elfy
     * @date 2013年02月25日  
     * @param zipFile 
     *            zip压缩文件 
     * @param dir 
     *            解压缩到这个路径下 
     * @throws IOException 
     *             文件流异常 
     */  
    public void decompressZip(File zipFile, String dir) throws IOException {  
        ZipFile zf = new ZipFile(zipFile);  
        try {  
            for (Enumeration<ZipArchiveEntry> entries = zf.getEntries(); entries  
                    .hasMoreElements();) {  
                ZipArchiveEntry ze = entries.nextElement();  
                // 不存在则创建目标文件夹。  
                File targetFile = new File(dir, ze.getName());  
                // 遇到根目录时跳过。  
                if (ze.getName().lastIndexOf("/") == (ze.getName().length() - 1)) {  
                    continue;  
                }  
                // 如果文件夹不存在,创建文件夹。  
                if (!targetFile.getParentFile().exists()) {  
                    targetFile.getParentFile().mkdirs();  
                }  
  
                InputStream i = zf.getInputStream(ze);  
                OutputStream o = null;  
                try {  
                    o = new FileOutputStream(targetFile);  
                    IOUtils.copy(i, o);  
                } finally {  
                    if (i != null) {  
                        i.close();  
                    }  
                    if (o != null) {  
                        o.close();  
                    }  
                }  
            }  
        } finally {  
            zf.close();  
        }  
    }  
  
    /** 
     * 功能:解压缩zip压缩包下的某个文件信息。 
     *  
     * @author Elfy
     * @date 2013年02月25日 
     * @param zipFile 
     *            zip压缩文件 
     * @param fileName 
     *            某个文件名,例如abc.zip下面的a.jpg,需要传入/abc/a.jpg。 
     * @param dir 
     *            解压缩到这个路径下 
     * @throws IOException 
     *             文件流异常 
     */  
    public void decompressZip(File zipFile, String fileName, String dir)  
            throws IOException {  
        // 不存在则创建目标文件夹。  
        File targetFile = new File(dir, fileName);  
        if (!targetFile.getParentFile().exists()) {  
            targetFile.getParentFile().mkdirs();  
        }  
  
        ZipFile zf = new ZipFile(zipFile);  
        Enumeration<ZipArchiveEntry> zips = zf.getEntries();  
        ZipArchiveEntry zip = null;  
        while (zips.hasMoreElements()) {  
            zip = zips.nextElement();  
            if (fileName.equals(zip.getName())) {  
                OutputStream o = null;  
                InputStream i = zf.getInputStream(zip);  
                try {  
                    o = new FileOutputStream(targetFile);  
                    IOUtils.copy(i, o);  
                } finally {  
                    if (i != null) {  
                        i.close();  
                    }  
                    if (o != null) {  
                        o.close();  
                    }  
                }  
            }  
        }  
    }  
  
    /** 
     * 功能:得到zip压缩包下的某个文件信息,只能在根目录下查找。 
     *  
     * @author Elfy
     * @date 2013年02月25日  
     * @param zipFile 
     *            zip压缩文件 
     * @param fileName 
     *            某个文件名,例如abc.zip下面的a.jpg,需要传入/abc/a.jpg。 
     * @return ZipArchiveEntry 压缩文件中的这个文件,没有找到返回null。 
     * @throws IOException 
     *             文件流异常 
     */  
    public ZipArchiveEntry readZip(File zipFile, String fileName)  
            throws IOException {  
        ZipFile zf = new ZipFile(zipFile);  
        Enumeration<ZipArchiveEntry> zips = zf.getEntries();  
        ZipArchiveEntry zip = null;  
        while (zips.hasMoreElements()) {  
            zip = zips.nextElement();  
            if (fileName.equals(zip.getName())) {  
                return zip;  
            }  
        }  
        return null;  
    }  
  
    /** 
     * 功能:得到zip压缩包下的所有文件信息。 
     *  
     * @author Elfy
     * @date 2013年02月25日 
     * @param zipFile 
     *            zip压缩文件 
     * @return Enumeration<ZipArchiveEntry> 压缩文件中的文件枚举。 
     * @throws IOException 
     *             文件流异常 
     */  
    public Enumeration<ZipArchiveEntry> readZip(File zipFile)  
            throws IOException {  
        ZipFile zf = new ZipFile(zipFile);  
        Enumeration<ZipArchiveEntry> zips = zf.getEntries();  
        return zips;  
    }  
}  



您的支持是我不断分享的动力!
感谢你的到来,我很高兴
分享到:
评论

相关推荐

    Java实现的Https请求工具类

    本篇文章将深入探讨如何在Java中实现一个用于处理HTTPS请求的工具类。 首先,要实现HTTPS请求,我们需要导入Java的`java.net`和`javax.net.ssl`包,这两个包提供了处理网络连接和SSL/TLS安全协议的类。以下是一些...

    完整的java文件读写工具类

    本篇将详细讲解标题为"完整的java文件读写工具类"所涉及的核心知识点,以及如何实现描述中提到的文件与目录管理功能。 1. **Java IO基础**: Java IO是Java标准库中的核心部分,提供了处理输入/输出流的类。在`...

    JAVA对象以及数据的工具类

    本篇文章将深入探讨Java中的对象、基础类型以及数据处理相关的工具类。 首先,让我们关注Java中的基础类型。Java有八种原始数据类型:byte、short、int、long、float、double、char和boolean。为了方便处理这些类型...

    java 调用 google 翻译工具类

    本篇文章将详细介绍如何在Java中使用Google翻译API,并提供一个可直接运行的工具类示例。 首先,我们需要了解Google翻译API的基本概念。Google Translate API是Google Cloud平台的一部分,它提供了RESTful接口,...

    Https请求工具类,Java实现http请求,https请求

    本篇文章将详细介绍如何使用Java语言实现Http和Https请求的工具类,包括如何建立Https连接、如何实现Post请求、如何处理SSL验证等内容。 在Java中,使用HttpURLConnection类可以实现Http和Https请求,但是对于...

    Java 单例模式 工具类

    本篇文章将深入探讨如何在Java中实现单例模式,以及如何创建一个工具类来封装单例的创建。 首先,让我们了解单例模式的几种常见实现方式: 1. 饿汉式(静态常量): 这是最简单的单例实现,它在类加载时就完成了...

    基于Java向zip压缩包追加文件

    创建一个名为`ZipUtil`的工具类,包含两个主要方法:`zip`和`zipFile`。 - `zip`方法用于压缩多个文件或目录。它接受一个文件路径列表和输出ZIP文件名作为参数。首先创建一个`ZipOutputStream`,然后遍历所有文件...

    封装Zip相关的工具类

    本篇文章将深入讲解一个名为"封装Zip相关的工具类"的实用代码库,它简化了在C#环境中对Zip文件的操作。 这个工具类的核心目标是提供压缩和解压文件的功能,同时易于集成到项目中,通过创建一个本地的NuGet库,使得...

    基于springboot的FtpUtil工具类.zip

    本篇文章将围绕“基于SpringBoot的FtpUtil工具类”进行深入探讨,旨在帮助开发者理解和运用这一工具,以提升项目开发效率。 首先,我们要了解SpringBoot如何集成FTP服务。在SpringBoot中,我们可以利用Spring ...

    java操作excel工具类

    Java操作Excel工具类是开发过程中常见的一种需求,尤其是在数据导入导出、数据分析或者报表生成的场景下。在Java中,我们可以使用多种库来处理Excel文件,例如Apache POI、JExcelAPI、OpenCSV等。本篇文章将重点介绍...

    Java json工具类,jackson工具类,ObjectMapper工具类

    本篇文章将深入探讨Jackson库中的核心工具类`ObjectMapper`,以及如何使用`JacksonUtils`来简化JSON操作。 `ObjectMapper`是Jackson库的核心组件,它负责将Java对象转换为JSON字符串,反之亦然。`ObjectMapper`提供...

    java常用工具类

    本篇将详细介绍一些Java中常用的工具类及其应用。 一、`java.util.Arrays` `Arrays`类是Java提供的一组静态方法,用于操作各种类型的数组。它提供了排序、搜索、填充、复制等操作,例如`sort()`用于对数组进行升序...

    zip压缩java工具类包含jar文件

    本篇将详细讲解如何利用Java工具类进行`zip`压缩和解压操作,并重点关注`ZipEntry`类和`commons-compress`库的应用。 首先,`ZipEntry`是Java标准库`java.util.zip`包中的核心类,用于表示`zip`文件中的一个条目...

    aspose-17.8 Java 生成 pdf 工具类

    在本篇内容中,我们将聚焦于"Aspose-17.8 Java 生成PDF工具类",了解如何利用Aspose库在Java环境中创建PDF文件。 首先,`aspose.pdf-17.8.jar`是Aspose.Pdf组件的核心库,它允许开发者在Java应用中创建、操作和转换...

    JavaDBF工具类

    这篇博文"JavaDBF工具类"的作者分享了一个实用的Java库,用于操作DBF文件。通过这个工具类,开发者可以轻松地在Java应用程序中读取DBF文件中的记录,添加、修改或删除记录,并将更改写回文件。这对于需要处理这种...

    java压缩工具类附zip4j_1.3.1.jar

    Java编程语言提供了多种库来处理压缩文件,其中`zip4j`是一个流行的开源库,用于在Java应用程序中方便地创建、读取、修改和解压缩ZIP文件。在本篇文章中,我们将深入探讨`zip4j`库以及如何利用它进行文件压缩和解...

    java utils 工具类

    本篇文章将聚焦于“Java Utils 工具类”,特别是通过分析提供的`ProcessUtil.java`文件,来深入理解如何构建和使用这样的工具类。 ### 1. Java工具类的基本概念 工具类通常包含一组静态方法,用于执行特定任务,如...

    java 日期操作工具类:包括计算两个时间相差距离多少天多少小时多少分多少秒

    这篇博客文章“java 日期操作工具类:包括计算两个时间相差距离多少天多少小时多少分多少秒”提供了一个实用的工具类,帮助开发者更方便地处理日期和时间差异。下面将详细解释这个工具类中的关键知识点。 1. **Java...

    Java日期工具类,Java时间工具类,Java时间格式化

    本篇将围绕Java中的日期工具类和时间工具类展开讨论,同时会涉及到日期时间的格式化。 首先,Java 8之前,我们主要依赖`java.util.Date`和`java.text.SimpleDateFormat`这两个类来处理日期和时间。`Date`类用于表示...

    Java IO 工具类大全

    本篇文章将全面解析Java IO工具类,帮助你理解并掌握其在实际开发中的应用。 一、Java IO基础 Java IO体系主要由流(Stream)组成,分为字节流和字符流两大类,分别处理字节数据和字符数据。字节流包括InputStream...

Global site tag (gtag.js) - Google Analytics