`

使用java.util.zip包提供的api完成压缩解压缩工作<转>

    博客分类:
  • JAVA
 
阅读更多

java中常用的压缩解压开发包
1.      AT4J是一套数据压缩和文件打包存档的工具,采用java开发 。它支持读取和创建zip和tar文件,以及通过第三方库实现多种类型的压缩算法。其中 bzip2 压缩库采用 Apache Commons Compress 项目.LZMA 压缩库采用 7-ZIP。


2.      jazzlib - 是一个完全用Java实现的压缩包,可以方便的替代现在的java.util.zip原始的实现。典型的使用场合是在applet中使用它,在applet中不允许使用原始代码。http://jazzlib.sourceforge.net/


3.      ZeroTurnaround 简称 zt-zip , 是一个 Java 用来处理压缩包的类库。www.zeroturnaround.com/
         有些童鞋打不开,那就去这里吧:https://github.com/zeroturnaround/zt-zip

4.      Apache Commons Compress用以实现将文件压缩或解压成 tar、zip、bzip2 等格式。http://commons.apache.org/compress/


5.      其它: 还有很多例如 junrar,jZipLib,jZlib4ME等等。



package com.accp.commons.util;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.CRC32;
import java.util.zip.CheckedInputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipException;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;

import org.apache.commons.lang.StringUtils;
/**
 * 压缩解压缩工具包
 * @author yoyoflash
 * @date:2012-6-15 下午12:03:27
 */
public class ZipTools {
        private static final int ZIP_BUFFER = 2048;
        private int zip_level;

        public ZipTools() {
                zip_level = 0;
        }

        /**
         * setLevel level - the compression level (0-9)
         * 
         * @param level
         *            int
         */
        public void setLevel(int level) {
                this.zip_level = level;

        }

        /**
         * 支持对于文件和目录的压缩
         * 
         * @param inputFile
         *            File 要压缩的目录或者文件
         * @param outputFile
         *            File 输出的压缩文件
         * @throws ZipException
         */
        public void zipFile(File inputFile, File outputFile) throws ZipException {
                try {
                        BufferedOutputStream bout = new BufferedOutputStream(
                                        new FileOutputStream(outputFile), ZIP_BUFFER);
                        ZipOutputStream out = new ZipOutputStream(bout);
                        zip(out, inputFile, inputFile.getName());
                        out.close();
                } catch (IOException ex) {
                        throw new ZipException(ex.getMessage());
                }
        }

        /**
         * 批量压缩功能
         * 
         * @param inputFiles
         *            File[] 要压缩的文件数组
         * @param outputFile
         *            File 压缩后的文件
         * @throws ZipException
         */
        public void zipFiles(File[] inputFiles, File outputFile)
                        throws ZipException {
                try {
                        BufferedOutputStream bout = new BufferedOutputStream(
                                        new FileOutputStream(outputFile), ZIP_BUFFER);
                        ZipOutputStream out = new ZipOutputStream(bout);
                        for (int i = 0; i < inputFiles.length; i++) {
                                zip(out, inputFiles[i], inputFiles[i].getName());
                        }
                        out.close();
                } catch (IOException ex) {
                        throw new ZipException(ex.getMessage());
                }
        }

        /**
         * 解压缩文件
         * 
         * @param inputFile
         *            File 原压缩文件
         * @param outputFile
         *            File 解压目录
         * @throws ZipException
         */
        public void unZipFile(File inputFile, File outputFile) throws ZipException {
                try {
                        FileInputStream tin = new FileInputStream(inputFile);
                        CheckedInputStream cin = new CheckedInputStream(tin, new CRC32());
                        BufferedInputStream bufferIn = new BufferedInputStream(cin,
                                        ZIP_BUFFER);
                        ZipInputStream in = new ZipInputStream(bufferIn);
                        ZipEntry z = in.getNextEntry();

                        while (z != null) {
                                String name = z.getName();
                                if (z.isDirectory()) {
                                        File f = new File(outputFile.getPath() + File.separator
                                                        + name);
                                        f.mkdirs();
                                } else {
                                        File f = new File(outputFile.getPath() + File.separator
                                                        + name);
                                        f.createNewFile();
                                        FileOutputStream out = new FileOutputStream(f);
                                        byte data[] = new byte[ZIP_BUFFER];
                                        int b;

                                        while ((b = in.read(data, 0, ZIP_BUFFER)) != -1) {
                                                out.write(data, 0, b);
                                        }
                                        out.close();
                                }
                                z = in.getNextEntry();
                        }

                        in.close();
                }

                catch (IOException ex) {
                        throw new ZipException(ex.getMessage());
                }

        }

        private void zip(ZipOutputStream out, File f, String base)
                        throws FileNotFoundException, ZipException {
                if (zip_level != 0) {
                        out.setLevel(zip_level);
                }
                if (f.isDirectory()) {
                        zipDirectory(out, f, base);
                } else {
                        if (StringUtils.isEmpty(base)) {
                                base = f.getName();
                        }
                        zipLeapFile(out, f, base);
                }

        }

        private void zipDirectory(ZipOutputStream out, File f, String base)
                        throws FileNotFoundException, ZipException {
                File[] files = f.listFiles();
                if (zip_level != 0) {
                        out.setLevel(zip_level);
                }
                try {
                        out.putNextEntry(new ZipEntry(base + "/"));
                } catch (IOException ex) {
                        throw new ZipException(ex.getMessage());
                }
                if (StringUtils.isEmpty(base)) {
                        base = new String();
                } else {
                        base = base + "/";
                }

                for (int i = 0; i < files.length; i++) {
                        zip(out, files[i], base + files[i].getName());
                }

        }

        private void zipLeapFile(ZipOutputStream out, File f, String base)
                        throws FileNotFoundException, ZipException {
                if (zip_level != 0) {
                        out.setLevel(zip_level);
                }
                try {
                        out.putNextEntry(new ZipEntry(base));
                        FileInputStream in = new FileInputStream(f);
                        BufferedInputStream bufferIn = new BufferedInputStream(in,
                                        ZIP_BUFFER);
                        byte[] data = new byte[ZIP_BUFFER];
                        int b;
                        while ((b = bufferIn.read(data, 0, ZIP_BUFFER)) != -1) {
                                out.write(data, 0, b);
                        }
                        bufferIn.close();
                } catch (IOException ex) {
                        throw new ZipException(ex.getMessage());
                }
        }
}







分享到:
评论

相关推荐

    java zip 压缩 解压缩 附带ant.jar

    `java.util.zip`是Java标准库提供的用于处理ZIP文件的API,它包含了处理压缩和解压缩功能的基本类。在本主题中,我们将深入探讨如何使用Java来对文件进行zip压缩和解压缩,并提及`ant.jar`的作用。 首先,让我们来...

    java android zip解压缩(解决压缩中文乱码问题)

    本篇文章将深入探讨如何在Android平台上解决Java ZIP库在解压缩中文文件时出现的乱码问题。 首先,我们要明白乱码问题的根源。在文件的压缩和解压缩过程中,文件名通常被编码为字节序列,这个序列取决于原始文件名...

    java解压缩zip代码与用到的jar包

    在本篇中,我们将深入探讨如何使用Java API来实现ZIP文件的解压缩,以及可能需要用到的第三方库。 首先,Java标准库(Java Standard Library)自身提供了对ZIP文件的支持。在`java.util.zip`包中,有两个关键类用于...

    java加密解密zip压缩包

    在Java编程环境中,处理文件的压缩与解压缩是常见的任务,而涉及到安全性,加密和解密就显得尤为重要。本文将详细讲解如何使用Java实现ZIP压缩包的加密与解密。 首先,我们需要理解加密的基本概念。加密是将明文...

    zip带密码压缩解压缩工具类(java)

    `zip4j`是一个强大的Java库,它提供了丰富的API来处理ZIP文件,包括添加、删除、提取文件,以及对ZIP文件进行加密。首先,我们需要引入`zip4j`库到我们的项目中。如果你使用的是Maven,可以在pom.xml文件中添加以下...

    java 解压缩zip文件

    本文将深入探讨如何使用Java API来解压缩ZIP文件,包括基本概念、核心类库以及具体实现步骤。 ZIP文件是一种广泛使用的文件归档格式,它可以将多个文件和目录组合成一个单一的可压缩文件,方便存储和传输。在Java中...

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

    通过Java提供的`java.util.zip`包,我们可以轻松地对文件和文件夹进行压缩和解压缩操作。了解并熟练掌握这些API,对于Java开发者来说是非常有用的技能,尤其是在处理大量数据或需要优化存储空间的应用场景中。在实际...

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

    java.util.Enumeration&lt;ZipEntry&gt; e = zipFile.getEntries(); while (e.hasMoreElements()) { ZipEntry zipEnt = e.nextElement(); // 解压缩逻辑... } ``` 对于`.zip`文件的压缩,可以使用`ZipOutputStream`,...

    java_zip.rar_java软件_压缩软件

    在Java中,`java.util.zip`包提供了处理ZIP文件格式的类和接口,包括`ZipOutputStream`用于创建ZIP文件,`ZipInputStream`用于读取ZIP文件,以及`ZipEntry`代表ZIP文件中的一个条目。 1. **Java ZIP API**: `java....

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

    我们将讨论核心的Java API,如`java.util.zip`包中的类,并通过一个名为`CompressFileUtils`的工具类来展示如何实现文件的解压缩功能。 首先,`java.util.zip`包提供了几个关键类,用于处理各种压缩格式,如`...

    JAVA文件压缩与解压缩实践(源代码+论文)

    4. **源代码实现**:实践中提供的源代码展示了如何使用Java API来实现文件和目录的压缩与解压缩。这可能包括读取文件,创建压缩流,写入数据到压缩流,以及从压缩流中读取和写入文件等步骤。 5. **文件操作**:在...

    java 打包文件(文件夹)为 zip压缩包 java 压缩文件

    1. **Java档案API (Java Archive API, JAR)**: Java标准库提供了`java.util.zip`包,其中包含用于创建、读取和修改zip档案的类,如`ZipOutputStream`和`ZipInputStream`。这些类可以用来压缩文件和文件夹。 2. **`...

    java操作zip_包括加解密码

    在Java中,我们可以使用标准的`java.util.zip`库来处理基本的ZIP文件操作,但若涉及到加密和解密,就需要借助第三方库,例如`Zip4j`。本文将深入探讨如何使用Java和Zip4j库进行ZIP文件的加密与解密。 首先,`java....

    Java zip 压缩/解压源码

    综上所述,Java提供的`java.util.zip`包提供了处理ZIP文件的强大工具。通过`ZipFile`、`ZipOutputStream`和`ZipEntry`,我们可以方便地完成文件和目录的压缩与解压缩任务。在实际应用中,理解这些类的用法和交互对于...

    java打包压缩ZIP

    ZIP是一种广泛使用的文件压缩格式,Java提供了一套完整的API来处理ZIP文件,使得我们可以方便地进行打包和解压操作。以下是对这个主题的详细讲解: 一、Java打包压缩ZIP Java中的`java.util.zip`包提供了对ZIP文件...

    【IT十八掌徐培成】Java基础第20天-05.Zip压缩流与解压缩流实现.zip

    `java.util.zip`包提供了`ZipFile`类,它可以方便地处理这些复杂情况。同时,`ZipOutputStream`和`ZipInputStream`也支持GZIPOutputStream和GZIPInputStream,它们可以与Zip流结合使用,提供更高效的压缩。 总的来...

    将文件进行zip压缩并base64加密和解密

    解密时,先使用`Base64Util.decodeBase64StringToFile()`将BASE64字符串解码回ZIP文件,再使用相应的工具解压缩。 在实际开发中,这些工具类可以封装成一个完整的库,提供给其他部分代码使用。例如,你可以创建一个...

    java zip压缩解压工具解决中文乱码问题

    首先,Java的标准库`java.util.zip`提供了`ZipOutputStream`和`ZipInputStream`类,用于创建和读取ZIP文件。然而,在处理中文等非ASCII字符时,如果不正确设置字符编码,就可能导致乱码。为了解决这个问题,我们需要...

Global site tag (gtag.js) - Google Analytics