`
lengchaotian
  • 浏览: 281656 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

压缩解压zip文件包

    博客分类:
  • java
 
阅读更多
import java.io.*;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.tools.zip.*;
import java.util.Enumeration;

 

public class AntZip
{
    // 日志对象
    private static Log logger = LogFactory.getLog(AntZip.class);
    
    /**
     * <压缩指定的文件夹>
     * <该方法只能压缩文件夹>
     * @param zipDirectory 需要压缩的文件夹全路径
     * @param destFile 压缩后的文件存放路径,包括压缩后的文件名
     * @see [类、类#方法、类#成员]
     */
    public static void doZip(String zipDirectory, String destFile)
    {
        File zipDir = new File(zipDirectory);
        
        try
        {
            ZipOutputStream zipOut = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(destFile)));
            handleDir(zipDir, zipOut);
            zipOut.close();
        }
        catch (IOException e)
        {
            logger.error(Global.LOG_EXCEPTION_NAME, e);
        }
    }
    
    /** 
     * <由doZip调用,递归完成目录文件读取>
     * <功能详细描述>
     * @param dir 文件
     * @param zipOut 压缩输出对象
     * @throws IOException
     * @see [类、类#方法、类#成员]
     */
    private static void handleDir(File dir, ZipOutputStream zipOut)
        throws IOException
    {
        FileInputStream fileIn;
        File[] files;
        
        files = dir.listFiles();
        
        if (files.length == 0)
        {
            //如果目录为空,则单独创建之. 
            //ZipEntry的isDirectory()方法中,目录以"/"结尾. 
            zipOut.putNextEntry(new ZipEntry(dir.toString() + "/"));
            zipOut.closeEntry();
        }
        else
        {
            //如果目录不为空,则分别处理目录和文件. 
            for (File fileName : files)
            {
                if (fileName.isDirectory())
                {
                    handleDir(fileName, zipOut);
                }
                else
                {
                    fileIn = new FileInputStream(fileName);
                    String path = fileName.getPath().substring(fileName.getPath().lastIndexOf("\\") + 1);
                    zipOut.putNextEntry(new ZipEntry(path));
                    
                    byte[] buf = new byte[1024];
                    int readedBytes = 0;
                    while ((readedBytes = fileIn.read(buf)) > 0)
                    {
                        zipOut.write(buf, 0, readedBytes);
                    }
                    
                    fileIn.close();
                    zipOut.closeEntry();
                }
            }
        }
    }
    
    /**
     * <解压指定zip文件>
     * <解压指定zip压缩包到指定目录>
     * @param unZipfileName 压缩包
     * @param destDir 目标目录
     * @see [类、类#方法、类#成员]
     */
    @SuppressWarnings("rawtypes")
    public static void unZip(String unZipfileName, String destDir)
    {
        //unZipfileName需要解压的zip文件名 
        FileOutputStream fileOut;
        File file;
        InputStream inputStream;
        
        try
        {
            ZipFile zipFile = new ZipFile(unZipfileName);
            
            for (Enumeration entries = zipFile.getEntries(); entries.hasMoreElements();)
            {
                ZipEntry entry = (ZipEntry)entries.nextElement();
                file = new File(entry.getName());
                
                if (entry.isDirectory())
                {
                    file.mkdirs();
                }
                else
                {
                    //如果指定文件的目录不存在,则创建之. 
                    String path = destDir + "/" + file.getParent();
                    File parent = new File(path);
                    if (!parent.exists())
                    {
                        parent.mkdirs();
                    }
                    
                    inputStream = zipFile.getInputStream(entry);
                    fileOut = new FileOutputStream(destDir + "/" + file);
                    
                    byte[] buf = new byte[1024];
                    int readedBytes = 0;
                    while ((readedBytes = inputStream.read(buf)) > 0)
                    {
                        fileOut.write(buf, 0, readedBytes);
                    }
                    fileOut.close();
                    
                    inputStream.close();
                }
            }
            zipFile.close();
        }
        catch (IOException e)
        {
            logger.error(Global.LOG_EXCEPTION_NAME, e);
        }
    }
}

 

分享到:
评论

相关推荐

    Delphi 压缩解压缩zip文件源代码,支持密码

    1. 可以将任意一个目录压缩成一个zip文件,包含密码 2. 可以将任意一个zip文件,加压到一个目录中,该目录位于当前执行文件所在目录的Unzip目录中,目录结构... 兼容三方的压缩解压缩文件。 带有演示程序以及原代码

    vbs压缩和解压zip,vbs压缩zip,vbs解压zip

    ### VBS 脚本实现 ZIP 文件的压缩与解压缩 在日常工作中,我们经常会遇到需要对文件进行压缩或解压缩的情况。对于批量处理任务,使用脚本语言可以大大提高效率。Visual Basic Script(VBS)作为Windows环境中的一种...

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

    本文将详细介绍如何使用CZip和CUnzip类来处理文件的压缩与解压缩任务。 首先,我们需要了解CZip和CUnzip类的基本概念。CZip类提供了创建、打开、添加、删除和提取ZIP文件的功能,而CUnzip类则负责从ZIP文件中提取...

    C++ zip解压缩压缩

    标题中的"C++ zip解压缩"指的是使用C++编程语言来处理ZIP文件格式,这是一种广泛使用的文件打包和压缩格式。ZIP文件可以将多个文件和目录组合到一个单一的档案文件中,并且可以进行压缩以节省存储空间。C++库提供了...

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

    在IT领域,尤其是在软件开发中,压缩和解压缩文件是一项常见的任务。`C++`作为一门强大且广泛应用的编程语言,提供了多种库来处理这样的需求。`Zlib`库就是一个非常著名的开源库,专用于数据压缩和解压缩,广泛应用...

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

    对于压缩,可以调用`zip_entry_open()`,`zip_entry_write()`和`zip_entry_close()`来写入新的压缩文件。 在实现过程中,需要注意错误处理,确保程序的健壮性。同时,为了提高效率,可以考虑使用多线程技术对大文件...

    PHP在线压缩解压ZIP文件

    unzip.php可能包含了处理ZIP文件解压的逻辑,包括读取ZIP文件、检查密码、解压缩文件到服务器指定位置等步骤。而zip.php则可能负责文件的压缩操作,它需要遍历要打包的文件和目录,创建新的ZIP文件,并将文件添加到...

    UE引擎解压缩zip格式文件插件

    在处理资源管理时,有时需要将大量素材打包成压缩文件,如ZIP格式,以便于存储和传输。"UE引擎解压缩zip格式文件插件"就是为了应对这种需求而设计的工具。 这个插件主要针对UE4和UE5引擎,允许开发者在游戏中直接...

    ucos移植zlib和zip文件解压缩

    为了在UCOS上实现ZIP解压,我们可以利用开源库,例如ZIP解压缩工具“unzip”。文件unzip101h可能是包含UNZIP库源代码的一个头文件。 1. 移植UNZIP库:如同ZLIB,我们需要对UNZIP库进行类似的配置和编译过程。这可能...

    C++压缩和解压ZIP文件,有演示代码

    5. **解压缩文件**:使用`ZipEntry* entry = zip-&gt;getEntry(filenameInZip.c_str())`获取ZIP文件中的特定条目,然后使用`entry-&gt;extract(outputFilePath.c_str())`将文件解压缩到指定的输出路径。 6. **关闭文件**...

    zip文件压缩解压源码 (c++)

    总结来说,`zip文件压缩解压源码(C++)`涉及的关键技术包括:理解zip文件格式,使用C++进行文件操作,选择和应用压缩算法,以及错误处理。通过分析和理解`XUnzip.cpp`和`XZip.cpp`,我们可以学习如何在C++环境中...

    java 解压缩zip文件

    ZIP文件是一种广泛使用的文件归档格式,它可以将多个文件和目录组合成一个单一的可压缩文件,方便存储和传输。在Java中,我们可以使用`java.util.zip`包中的类来读取和解压ZIP文件。 首先,我们需要了解几个关键的...

    VC++压缩解压zip文件(支持密码)

    只能压缩解压zip格式的,不需要dll或者库文件,核心是HZIP,支持带密码压缩解压。详情参见: http://blog.csdn.net/sunflover454/article/details/48981841

    C#压缩/解压ZIP文件带密码功能

    2. **解压缩文件**: - `ZipFile.ExtractToDirectory(string sourceArchiveFileName, string destinationDirectoryName)`: 这个方法可以将ZIP文件解压缩到指定的目录。 - `ZipFile.OpenRead(string ...

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

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

    JAVA文件压缩与解压缩实践,java解压缩zip文件,Java源码.zip

    3. **解压缩文件** 解压ZIP文件则需要一个`ZipInputStream`实例,它包装在一个`FileInputStream`中,指向ZIP文件。通过调用`getNextEntry`方法,你可以逐个访问ZIP文件中的每个条目,然后创建相应的文件或目录,将...

    C语言zip解压缩算法源代码

    本篇文章将深入探讨C语言实现的zip解压缩算法源代码,以及与之相关的技术知识点。 首先,我们要了解zip文件格式。Zip是一种广泛使用的文件压缩标准,它能够将多个文件打包成一个单一的压缩文件,便于存储和传输。在...

    使用 zlib库 解压缩 zip文件

    在IT行业中,处理压缩文件是常见的任务之一,尤其是在软件开发中。`zlib`是一个广泛使用的开源库,专为数据压缩而设计,它支持多种压缩算法,包括著名的DEFLATE算法,该算法被广泛应用于ZIP文件格式。本篇文章将详细...

    InfoZip压缩解压zip文件源码

    解压缩模块负责逆向操作,从ZIP文件中恢复原始数据。文件I/O接口处理与操作系统的交互,如读写文件。命令行接口则提供用户友好的操作界面,如创建、添加、提取ZIP文件等。 4. CInfoZip源码:在提供的文件列表中,...

Global site tag (gtag.js) - Google Analytics