`

利用zip压缩和解压文件(目录)

阅读更多
package com.yonge.zip;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;

import org.apache.commons.io.IOUtils;

/**
 * 压缩目标文件为zip文件
 * @author wb-gaoy
 * @version $Id: CompressByZip.java,v 0.1 2013-1-8 上午10:18:16 wb-gaoy Exp $
 */
public class ZipUtil {

    public static void zip(File srcFile, File targetFile) throws IOException {
        ZipOutputStream zipOutputStream = null;
        FileOutputStream fileOutputStream = null;
        try {
            fileOutputStream = new FileOutputStream(targetFile);
            zipOutputStream = new ZipOutputStream(fileOutputStream);
            zip(zipOutputStream, srcFile, "");
        } finally {
            if (zipOutputStream != null) {
                zipOutputStream.close();
            }
            if (fileOutputStream != null) {
                fileOutputStream.close();
            }
        }
    }

    public static void zip(ZipOutputStream zipOutputStream, File srcFile, String baseURL)
                                                                                         throws IOException {

        baseURL = baseURL == null || baseURL.length() == 0 ? srcFile.getName() : baseURL
                                                                                 + "/"
                                                                                 + srcFile
                                                                                     .getName();
        if (srcFile.isDirectory()) {
            File[] files = srcFile.listFiles();
            if (files != null && files.length > 0) {
                for (File f : files) {
                    zip(zipOutputStream, f, baseURL);
                }
            } else {
                zipOutputStream.putNextEntry(new ZipEntry(baseURL + "/"));
            }
        } else {
            zipOutputStream.putNextEntry(new ZipEntry(baseURL));

            FileInputStream fileInputStream = null;
            try {
                //读数据
                fileInputStream = new FileInputStream(srcFile);
                byte[] bytes = new byte[1024];
                int length = -1;
                while ((length = fileInputStream.read(bytes)) != -1) {
                    zipOutputStream.write(bytes, 0, length);
                }
            } finally {
                if (fileInputStream != null) {
                    fileInputStream.close();
                }
            }
        }
    }

    public static void unzip(File srcFile, File targetFile) throws IOException {
        FileInputStream fileInputStream = null;
        ZipInputStream zipInputStream = null;
        FileOutputStream fileOutputStream = null;
        try {
            fileInputStream = new FileInputStream(srcFile);
            zipInputStream = new ZipInputStream(fileInputStream);
            if (!targetFile.exists()) {
                targetFile.mkdirs();
            }
            ZipEntry entry = zipInputStream.getNextEntry();
            File tempFile;
            while (entry != null) {
                tempFile = new File(targetFile, entry.getName());
                if (entry.isDirectory()) {
                    tempFile.mkdir();
                } else {
                    tempFile.getParentFile().mkdirs();
                    fileOutputStream = new FileOutputStream(tempFile);
                    IOUtils.copy(zipInputStream, fileOutputStream);
                }
                entry = zipInputStream.getNextEntry();
            }
        } finally {
            if (zipInputStream != null) {
                zipInputStream.close();
            }
            if (fileInputStream != null) {
                fileInputStream.close();
            }
            if (fileOutputStream != null) {
                fileOutputStream.close();
            }
        }
    }

    public static void main(String[] args) {
        File file = new File("C:\\ecmng\\site\\tmp\\test");
        try {
            //zip(file, new File("demo.zip"));
            unzip(new File("demo.zip"), file);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

0
2
分享到:
评论

相关推荐

    Zip压缩和解压文件

    Zip格式还允许包含多个文件和目录,每个都可独立压缩,使得在压缩大型文件集时更为高效。 进行Zip压缩时,通常会使用专门的工具或编程库。例如,在Java中,我们可以利用java.util.zip包中的ZipOutputStream类来实现...

    C++ Zlib库实现zip文件压缩解压(支持递归压缩)

    本篇文章将详细介绍如何在`C++`中利用`Zlib`库实现对`zip`文件的压缩和解压,并特别关注其支持的递归压缩特性,以及如何将其与自动更新功能结合使用。 首先,我们需要理解`Zlib`库的基本原理。`Zlib`库基于`DEFLATE...

    C语言实现Zip压缩解压.rar

    总之,C语言实现ZIP压缩解压涉及文件操作、数据压缩算法和ZIP文件格式的理解。通过学习和应用相关库,开发者可以创建自己的ZIP工具,满足特定的需求。这个过程既锻炼了C语言编程技能,也加深了对文件压缩技术的理解...

    压缩/解压文件(支持rar,zip)

    总之,通过利用合适的库和编程技巧,我们可以在ASP.NET中实现RAR和ZIP文件的在线压缩和解压缩功能,为用户提供高效、稳定的服务。同时,持续关注和学习新的库和技术,能够帮助我们提升解决方案的质量和性能。

    pb用7z压缩和解压文件pb12.5(源码含Demo).zip

    标题 "pb用7z压缩和解压文件pb12.5(源码含Demo).zip" 提供的信息表明,这是一个关于使用7z工具在PowerBuilder(简称PB)环境中进行文件压缩和解压缩的示例。7z是一种高效、开源的压缩格式,提供了比常见的ZIP和RAR...

    PHP在线压缩解压ZIP文件

    而zip.php则可能负责文件的压缩操作,它需要遍历要打包的文件和目录,创建新的ZIP文件,并将文件添加到其中。这两个文件可能都包含了错误处理和日志记录的代码,以便在出现问题时能够追踪和调试。 在实现这些功能时...

    VC++ MFC 如何用 CZip CUnzip类压缩解压缩文件

    CZip和CUnzip是两个非常实用的类,它们分别用于文件的压缩和解压缩操作,是ZLib库的一个MFC封装,使得在MFC项目中使用起来更加方便。本文将详细介绍如何使用CZip和CUnzip类来处理文件的压缩与解压缩任务。 首先,...

    C++ zip解压缩压缩

    ZIP文件可以将多个文件和目录组合到一个单一的档案文件中,并且可以进行压缩以节省存储空间。C++库提供了处理ZIP文件的API,使得开发人员能够轻松地对这些文件进行操作。 描述中提到,只需包含头文件即可进行压缩...

    MFC的极其简单的压缩和解压代码

    本篇将重点介绍如何利用MFC进行文件的压缩和解压操作,以及相关的知识点。 首先,`unzip.cpp`和`zip.cpp`是实现压缩和解压功能的源代码文件,它们可能包含了对压缩库的具体实现,如ZIP或RAR格式的处理。`unzip.h`和...

    Java实现的带密码压缩与解压zip文件源码

    `ZipOutputStream`用于创建ZIP文件,而`ZipInputStream`则用于读取和解压ZIP文件。为了添加密码保护,我们需要在创建`ZipOutputStream`时设置一个密码。 1. **密码保护**:在压缩过程中,可以使用`ZipEntry`对象来...

    JAVA解压ZIP多层目录文件(需ant.jar

    ### JAVA解压ZIP多层目录文件(需ant.jar) #### 概述 本文将详细介绍一个Java方法,该方法用于解压包含多层目录结构的ZIP文件,并能够支持中文文件名。这种方法利用了Apache Ant库中的`org.apache.tools.zip....

    VB程序实例-利用WinRar压缩和解压文件.zip

    VB程序实例-利用WinRar压缩和解压文件.zip

    利用zip开源代码压缩解压文件

    在IT行业中,压缩和解压文件是常见的操作,特别是在数据传输、存储优化和软件分发等领域。本篇文章将深入探讨如何利用开源的zip代码来实现文件的压缩与解压缩功能。 首先,我们要知道ZIP是一种广泛使用的文件格式,...

    C++ 压缩和解压zip、rar、7z等库

    标题中提到的"压缩和解压zip、rar、7z等库"正是针对这一需求的解决方案。以下将详细介绍这些库以及如何在C++中使用它们。 1. **ZIP库**: ZIP是最常见的文件压缩格式之一。在C++中,可以使用`libzip`库进行操作。`...

    使用 Java 实现的压缩/解压 ZIP 文件的工具类

    本文将深入探讨如何使用Java实现ZIP文件的压缩与解压,重点讲解核心API,如`java.util.zip`包中的`ZipOutputStream`和`ZipInputStream`。 首先,我们来了解一下ZIP文件格式。ZIP是一种用于存储多个文件到一个单一...

    C#利用SharpZipLib进行压缩和解压

    C#利用SharpZipLib进行压缩和解压 C#中的压缩和解压是非常常见的操作, SharpZipLib是一个流行的压缩库,它提供了压缩和解压的功能。在本文中,我们将使用SharpZipLib库来实现文件的压缩和解压。 SharpZipLib简介...

    ucos移植zlib和zip文件解压缩

    2. 处理ZIP文件格式:理解ZIP文件的内部结构,包括中央目录记录、本地文件头和数据区。这些部分分别包含了文件名、压缩方法、压缩时间等信息,以及压缩数据的实际位置。 3. 解析ZIP文件:在UCOS应用中,通过UNZIP库...

    zip 压缩 文件 Java

    在Java编程语言中,处理ZIP压缩文件是一项常见的任务,它涉及到文件和目录的打包与解压。本篇文章将深入探讨如何使用Java实现ZIP文件的压缩和解压缩操作,以及涉及的相关知识点。 首先,理解ZIP文件格式是基础。ZIP...

    Android zip文件压缩解压

    通常,源码会展示如何处理异常、优化性能以及如何处理不同类型的文件和目录。 ### 5. 工具选择 选择合适的工具取决于项目需求。对于简单的操作,Java自带的API可能已经足够。如果需要更复杂的功能,如支持更多压缩...

    Delphi实现Zip压缩/解压缩

    总之,Delphi的`System.Zip`单元为开发者提供了强大的ZIP文件操作能力,无论是创建新的ZIP文件、添加文件还是解压缩文件都变得轻而易举。同时,通过COM接口,我们可以让不同版本的Delphi之间共享这些功能,大大提升...

Global site tag (gtag.js) - Google Analytics