`

使用java.util.zip实现文件压缩和解压

    博客分类:
  • J2SE
阅读更多
java.util.zip只支持UTF-8,Ant里面可以指定编码
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.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;

public class ZipTest
{
    /**解压zip*/
    private ZipInputStream zipIn;
    /**压缩zip*/
    private ZipOutputStream zipOut;
    private ZipEntry zipEntry;
    private static int bufSize;
    private byte[] buf;
    private int readedBytes;
    
    public ZipTest()
    {
        this(512);
    }
    
    public ZipTest(int bufSize)
    {
        this.bufSize = bufSize;
        this.buf = new byte[this.bufSize];
    }
    
    /**
     * 压缩文件夹的文件
     * @param zipDirectory 需要压缩的文件夹名
     */
    public void doZip(String zipDirectory)
    {
        File file;
        File zipDir;
        
        zipDir = new File(zipDirectory);
        //压缩后生成的zip文件名
        String zipFileName = zipDir.getName() + ".zip";
        
        try
        {
            this.zipOut = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(zipFileName)));
            handleDir(zipDir,this.zipOut);
            this.zipOut.close();
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    /**
     * 由doZip调用,递归完成目录文件读取
     * @param dir
     * @param zipOut
     * @throws IOException
     */
    private void handleDir(File dir,ZipOutputStream zipOut) throws IOException
    {
        FileInputStream fileIn;
        File[] files;
        files = dir.listFiles();
        if(files.length==0)
        {
            //如果目录为空,则单独创建
            //ZipEntry的isDirectory()方法中,目录是以"/"结尾
            this.zipOut.putNextEntry(new ZipEntry(dir.toString()+"/"));
            this.zipOut.closeEntry();
        }
        else
        {
            //如果目录不为空,则分别处理目录和文件
            for(int i=0;i<files.length;i++)
            {
                File fileName=(File)files[i];
                if(fileName.isDirectory())
                {
                    handleDir(fileName,this.zipOut);
                }
                else
                {
                    fileIn = new FileInputStream(fileName);
                    this.zipOut.putNextEntry(new ZipEntry(fileName.toString()));
                    while((this.readedBytes=fileIn.read(this.buf))>0)
                    {
                        this.zipOut.write(this.buf , 0 , this.readedBytes); 
                    }
                    this.zipOut.closeEntry(); 
                }
            }
        }
    }
    
    /**
     * 解压指定zip文件
     * @param unZipfileName 需要解压的zip文件名
     */
    public void unZip(String unZipfileName)
    {
        FileOutputStream fileOut;
        File file;
        try
        {
            this.zipIn = new ZipInputStream(new BufferedInputStream(new FileInputStream(unZipfileName)));
            while((this.zipEntry= this.zipIn.getNextEntry())!=null)
            {
                file = new File(this.zipEntry.getName());
                if(this.zipEntry.isDirectory())
                {
                    file.mkdirs();
                }
                else
                {
                    //如果指定目录不存在,则创建
                    File parent = file.getParentFile();
                    if(!parent.exists())
                    {
                        parent.mkdirs();
                    }
                    fileOut = new FileOutputStream(file);
                    while((this.readedBytes = this.zipIn.read(this.buf))>0)
                    {
                        fileOut.write(this.buf,0,this.readedBytes);
                    }
                    fileOut.close();
                }
                this.zipIn.closeEntry();
            }
        }
        catch (Exception e) {
           e.printStackTrace();
        }
    }
    
    public void setBufSize(int bufSize)
    {
        this.bufSize = bufSize;
    }
    
    public static void main(String args[]) throws Exception
    {
        ZipTest ziptest = new ZipTest();
        //ziptest.doZip("D:\\tmp");
        ziptest.unZip("D:\\workspace\\iipsmssend\\tmp.zip");
    }
}
分享到:
评论

相关推荐

    用java.util.zip包现数据压缩与解压

    ### 使用 Java.util.zip 包实现数据压缩与解压 在计算机科学领域,数据压缩技术是一项重要的功能,它能够帮助减少存储空间的需求以及提高网络传输效率。本文将通过一系列的示例来详细介绍如何利用 Java 中的 `java....

    java.util.zip 解压缩文件,ZIP格式压缩文件.rar

    总结一下,`java.util.zip` 包提供了解压缩和压缩文件的强大功能,这对于任何需要处理ZIP文件的Java开发者来说都是必不可少的工具。无论你是想解压下载的库,还是想将项目文件打包成ZIP,这个包都能提供简洁且高效的...

    根据java.util.zip源码修改zip支持中文

    在Java编程语言中,`java.util.zip`包提供了对压缩文件格式的支持,如ZIP和GZ等。然而,早期版本的Java在处理包含非ASCII字符(例如中文字符)的文件名时存在一些问题。这是因为ZIP文件格式本身是支持Unicode编码的...

    利用java.util.zip 包中提供的类来实现压缩和解压zip 格式文件的功能.rar

    下面我们将详细探讨如何使用这些类来实现ZIP文件的压缩和解压功能。 **一、压缩ZIP文件** 1. **使用ZipOutputStream** `ZipOutputStream`是处理ZIP文件输出的核心类,它继承自`FilterOutputStream`。我们可以通过...

    详解Java无需解压直接读取Zip文件和文件内容

    Java无需解压直接读取Zip文件和文件内容是Java语言中的一种常见操作,通过使用java.util.zip包中的ZipFile、ZipInputStream和ZipEntry类,我们可以轻松地读取Zip文件和文件内容。下面,我们将详细介绍如何使用Java...

    tomcat启动报错:java.util.zip.ZipException的解决方法

    在使用Apache Tomcat服务器时,有时会遇到启动异常的情况,其中一种常见的错误是`java.util.zip.ZipException`。这个异常通常表明在处理ZIP或JAR文件时遇到了问题,可能是因为文件损坏、格式不正确或者无法打开。在...

    java解压zip压缩文件

    在Java编程环境中,解压ZIP压缩文件是一项常见的任务,它涉及到文件I/O操作以及对ZIP文件格式的理解。本文将深入探讨如何使用Java实现这一功能,同时也会提及`UnZip.java`和`UnZip2.java`这两个文件可能包含的实现...

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

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

    java实现的解压与压缩 zip和rar类型的

    本文将深入探讨如何使用Java实现ZIP和RAR类型的压缩与解压操作,以及相关知识点。 首先,我们来看ZIP文件格式。ZIP是一种广泛使用的文件压缩格式,其在Java中的处理主要通过`java.util.zip`包。这个包提供了多个类...

    java 中 zip压缩文件解压工具类

    本文将深入探讨如何使用Java来处理ZIP文件,特别是针对标题所提及的“java 中 zip压缩文件解压工具类”。我们将讨论核心的Java API,如`java.util.zip`包中的类,并通过一个名为`CompressFileUtils`的工具类来展示...

    使用java代码替换zip内的文件.docx

    总结来说,这段Java代码展示了如何使用`ZipInputStream`和`ZipOutputStream`来替换ZIP文件中的文件,而无需先解压再重新压缩。这种方法减少了磁盘空间的占用,提高了处理效率,特别适用于处理大文件或需要高效操作...

    java获取压缩文件的名称并解压

    本文将深入探讨如何使用Java来获取ZIP文件的名称以及如何高效地解压缩这些文件,特别是通过多线程来提高性能。 首先,我们需要引入Java的内置库`java.util.zip`,它提供了处理ZIP文件的类和接口。主要使用的类有`...

    Java实现将多目录多层级文件打成ZIP包,以及解压ZIP包

    本文将详细讲解如何使用Java实现将多目录多层级的文件打成ZIP包,以及如何解压这些ZIP包。我们将主要关注`FileUtils.java`这个类,以及依赖的`commons-compress-1.1.jar`库。 `commons-compress-1.1.jar`是Apache ...

    java 压缩/解压 .zip/.rar/.tar 文件

    本文将详细讲解如何使用Java API来压缩和解压缩`.zip`、`.rar`和`.tar`这三种常见的文件格式。 首先,对于`.zip`文件的处理,我们可以使用Apache的`commons-compress`库中的`ZipFile`和`ZipOutputStream`类。在提供...

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

    在Java编程环境中,处理压缩和解压缩文件是一...以上是关于Java实现带密码的ZIP文件压缩和解压的基本概念和实现细节。通过深入理解这些知识点,开发者可以构建自己的安全文件处理工具,满足对数据隐私和安全性的需求。

    用java解压*.zip*.rar*.gz*.bz*.bz2等压缩文件含jar

    标题提到的"用java解压*.zip*.rar*.gz*.bz*.bz2等压缩文件含jar"涉及到Java对多种压缩格式的支持,包括ZIP、RAR、GZ、BZ和BZ2。这些文件格式在软件开发、数据传输和存储中广泛使用。下面我们将详细讨论如何使用Java...

    java将文件夹压缩成zip,解压zip压缩包

    本篇文章将详细探讨如何使用Java内置的IO流来实现文件夹的zip压缩以及zip压缩包的解压,无需依赖其他的第三方库如Apache Commons IO或JavaZip。 ### 文件夹压缩成ZIP 首先,我们需要理解如何将一个文件夹及其内容...

    java解压和压缩ZIP文件的功能

    总之,Java通过`java.util.zip`包提供了方便的API来处理ZIP文件,使得在后台服务中实现文件的压缩和解压变得简单高效。`ant.jar`库虽然主要用于构建任务,但其内部的`Zip`任务也可以用于ZIP文件操作,提供了另一种...

    java实现的zip文件定时解压

    本话题聚焦于使用Java实现的zip文件定时解压功能,这是一个常见的需求,特别是在数据备份、文件同步或自动化工作流中。下面我们将深入探讨如何使用Java来实现这一功能。 首先,我们需要了解Java对zip文件的支持。...

    org.apache.tools.zip解决解压乱码问题

    import java.util.Enumeration; import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipFile; import org.apache.tools.zip.ZipOutputStream; /** * * 类名: ZipUtil.java * 描述:压缩...

Global site tag (gtag.js) - Google Analytics