`
bruce.ko
  • 浏览: 33960 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

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

阅读更多
[color=indigo][/color][size=medium][/size]使用java.util.zip实现文件压缩和解压
import java.io.*;
import java.util.zip.*;
/**
*功能:zip压缩、解压
*说明:本程序通过ZipOutputStream和ZipInputStream实现了zip压缩和解压功能.
*问题:由于java.util.zip包并不支持汉字,当zip文件中有名字为中文的文件时
, author by http://www.bt285.cn http://www.5a520.cn
*     就会出现异常:"Exception  in thread "main " java.lang.IllegalArgumentException 
*               at   java.util.zip.ZipInputStream.getUTF8String(ZipInputStream.java:285)
*解决:
*  方法1、修改import java.util.zip.ZipInputStream和ZipOutputStream.
*          java.util.zip只支持UTF-8,Ant里面可以指定编码.
*  方法2、使用Apache Ant里提供的zip工具。
*          不使用java.util.zip的包,把ant.jar放到classpath中.
*          程序中使用import org.apache.tools.zip.*;
*
*仅供编程学习参考.
*
*@author Winty
*@date   2008-8-3
*@Usage:
*   压缩:java Zip -zip "directoryName"
*   解压:java Zip -unzip "fileName.zip"
*/

public class Zip{
    private ZipInputStream  zipIn;      //解压Zip
    private ZipOutputStream zipOut;     //压缩Zip
    private ZipEntry        zipEntry;
    private static int      bufSize;    //size of bytes
    private byte[]          buf;
    private int             readedBytes;
    
    public Zip(){
        this(512);
    }

    public Zip(int bufSize){
        this.bufSize = bufSize;
        this.buf = new byte[this.bufSize];
    }
    
    //压缩文件夹内的文件
    public void doZip(String zipDirectory){//zipDirectoryPath:需要压缩的文件夹名
        File file;
        File zipDir;

        zipDir = new File(zipDirectory);
        String zipFileName = zipDir.getName() + ".zip";//压缩后生成的zip文件名

        try{
            this.zipOut = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(zipFileName)));
            handleDir(zipDir , this.zipOut);
            this.zipOut.close();
        }catch(IOException ioe){
            ioe.printStackTrace();
        }
    }

    //由doZip调用,递归完成目录文件读取
    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(File fileName : files){
                //System.out.println(fileName);

                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文件
    public void unZip(String unZipfileName){//unZipfileName需要解压的zip文件名
        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());
                //System.out.println(file);///

                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(IOException ioe){
            ioe.printStackTrace();
        }
    }

    //设置缓冲区大小
    public void setBufSize(int bufSize){
        this.bufSize = bufSize;
    }

    //测试Zip类
    public static void main(String[] args)throws Exception{
        if(args.length==2){
            String name = args[1];
            Zip zip = new Zip();

            if(args[0].equals("-zip"))
                zip.doZip(name);
            else if(args[0].equals("-unzip"))
                zip.unZip(name);
        }
        else{
            System.out.println("Usage:");
            System.out.println("压缩:java Zip -zip http://www.bt285.cn /directoryName");
            System.out.println("解压:java Zip -unzip http://www.feng123.com /fileName.zip");
            throw new Exception("Arguments error!");
        }
    }
}
分享到:
评论

相关推荐

    用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获取压缩文件的名称并解压

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

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

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

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

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

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

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

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

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

    用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多层目录文件(需ant.jar

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

    java实现的zip文件定时解压

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

Global site tag (gtag.js) - Google Analytics