`

Java实现Zip压缩,解压缩(二)

阅读更多

今天写了个用java压缩的功能,可以实现对文件和目录的压缩。

由于上一篇文章中使用java.util.zip.ZipOutputStream有中文乱码问题,所以采用org.apache.tools.zip.ZipOutputStream,此代码需要导入ant-1.6.5.jar。
以下是代码:

	package org;    
    import java.io.BufferedInputStream;  
    import java.io.File;  
    import java.io.FileInputStream;  
    import java.io.FileOutputStream;  
    import java.util.zip.CRC32;  
    import java.util.zip.CheckedOutputStream;  
      
    import org.apache.tools.zip.ZipEntry;  
    import org.apache.tools.zip.ZipOutputStream;  
      
    public class IteyeZip {  
        static final int BUFFER = 8192;  
      
        private File zipFile;  
      
        public IteyeZip(String pathName) {  
            zipFile = new File(pathName);  
        }  
      
        public void compress(String srcPathName) {  
            File file = new File(srcPathName);  
            if (!file.exists())  
                throw new RuntimeException(srcPathName + "不存在!");  
            try {  
                FileOutputStream fileOutputStream = new FileOutputStream(zipFile);  
                CheckedOutputStream cos = new CheckedOutputStream(fileOutputStream,  
                        new CRC32());  
                ZipOutputStream out = new ZipOutputStream(cos);  
                String basedir = "";  
                compress(file, out, basedir);  
                out.close();  
            } catch (Exception e) {  
                throw new RuntimeException(e);  
            }  
        }  
      
        private void compress(File file, ZipOutputStream out, String basedir) {  
            /* 判断是目录还是文件 */  
            if (file.isDirectory()) {  
                System.out.println("压缩:" + basedir + file.getName());  
                this.compressDirectory(file, out, basedir);  
            } else {  
                System.out.println("压缩:" + basedir + file.getName());  
                this.compressFile(file, out, basedir);  
            }  
        }  
      
        /** 压缩一个目录 */  
        private void compressDirectory(File dir, ZipOutputStream out, String basedir) {  
            if (!dir.exists())  
                return;  
      
            File[] files = dir.listFiles();  
            for (int i = 0; i < files.length; i++) {  
                /* 递归 */  
                compress(files[i], out, basedir + dir.getName() + "/");  
            }  
        }  
      
        /** 压缩一个文件 */  
        private void compressFile(File file, ZipOutputStream out, String basedir) {  
            if (!file.exists()) {  
                return;  
            }  
            try {  
                BufferedInputStream bis = new BufferedInputStream(  
                        new FileInputStream(file));  
                ZipEntry entry = new ZipEntry(basedir + file.getName());  
                out.putNextEntry(entry);  
                int count;  
                byte data[] = new byte[BUFFER];  
                while ((count = bis.read(data, 0, BUFFER)) != -1) {  
                    out.write(data, 0, count);  
                }  
                bis.close();  
            } catch (Exception e) {  
                throw new RuntimeException(e);  
            }  
        }  
    }  


查阅多篇文章之后发现还有一种方法,用org.apache.tools.ant.taskdefs.Zip来实现,更加简单。
package org;

import java.io.File;  
  
import org.apache.tools.ant.Project;  
import org.apache.tools.ant.taskdefs.Zip;  
import org.apache.tools.ant.types.FileSet;  
  
public class IteyeZipOne {  
  
    private File zipFile;  
  
    public IteyeZipOne(String pathName) {  
        zipFile = new File(pathName);  
    }  
      
    public void compress(String srcPathName) {  
        File srcdir = new File(srcPathName);  
        if (!srcdir.exists())  
            throw new RuntimeException(srcPathName + "不存在!");  
          
        Project prj = new Project();  
        Zip zip = new Zip();  
        zip.setProject(prj);  
        zip.setDestFile(zipFile);  
        FileSet fileSet = new FileSet();  
        fileSet.setProject(prj);  
        fileSet.setDir(srcdir);  
        //fileSet.setIncludes("**/*.java"); 包括哪些文件或文件夹 eg:zip.setIncludes("*.java");  
        //fileSet.setExcludes(...); 排除哪些文件或文件夹  
        zip.addFileset(fileSet);  
          
        zip.execute();  
    }  
}  



测试类:

        
        public static void main(String[] args) {  
//            IteyeZip zc = new  IteyeZip("c:\\szhzip.zip");  
//            zc.compress("c:\\test");  
              
            IteyeZipOne zca = new IteyeZipOne("c:\\szhzipant.zip");  
            zca.compress("c:\\test");  
        }  

分享到:
评论

相关推荐

    (JAVA)利用Java实现zip压缩.解压缩.rar_decompress rar java_zip 压缩

    在提供的资源中,"www.pudn.com.txt"可能是文档或链接,用于提供更多的学习资源或者相关背景信息,而"(JAVA)利用Java实现zip压缩.解压缩.txt"可能是教程文本,详细解释了上述的压缩和解压缩过程。 总的来说,Java中...

    利用Java实现zip压缩解压缩

    ### Java 实现 ZIP 文件压缩与解压缩 #### 知识点概述 在现代软件开发过程中,数据压缩是一项非常重要的技术,特别是在处理大量数据时。Java 作为一种广泛应用的编程语言,提供了丰富的 API 来支持文件的压缩与解...

    Java工具类ZIP解压缩

    Java工具类ZIP解压缩Java工具类ZIP解压缩Java工具类ZIP解压缩

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

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

    java ZIP 解压缩

    java语言操作解压缩文件。 /** * 数据压缩 * * @param data * @return * @throws Exception */ public static byte[] compress(byte[] data) throws Exception { ByteArrayInputStream bais = new ...

    JAVA文件压缩与解压缩实践(源代码).zip

    JAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩...

    java zip文件压缩与解压缩

    解压缩ZIP文件则可以使用`org.apache.commons.compress.archivers.zip.ZipArchiveInputStream`类。同样,我们需要设置正确的编码来正确读取中文文件名: ```java import org.apache.commons.compress.archivers.zip...

    Java实现压缩与解压缩功能源码

    解压缩ZIP文件的过程则相反,需要创建一个`ZipInputStream`实例,并将其链接到`FileInputStream`。通过调用`getNextEntry()`方法遍历ZIP文件中的每个条目,然后将数据读取到一个缓冲区,并写入目标文件。以下是一个...

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

    在本主题中,我们将深入探讨如何使用Java来对文件进行zip压缩和解压缩,并提及`ant.jar`的作用。 首先,让我们来看一下`JavaZip.java`这个文件。它很可能包含了一个示例程序,演示了如何使用Java API来压缩和解压缩...

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

    在Java编程语言中,文件的压缩与解压缩是常见的操作,尤其在数据传输、存储优化以及备份场景下显得尤为重要。...通过上述知识点,开发者能够有效地在Java环境中进行ZIP文件的压缩与解压缩操作,满足实际项目需求。

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

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

    java zip解压缩

    二、Java Zip解压缩 2. 使用`ZipInputStream`类进行解压缩: `ZipInputStream`类可以从输入流中读取Zip文件内容。以下是一个解压缩Zip文件到指定目录的示例: ```java import java.io.*; import java.util.zip.*; ...

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

    以下是一个使用此库进行RAR解压缩的示例: ```java import org.apache.commons.compress.archivers.rar.RarArchiveEntry; import org.apache.commons.compress.archivers.rar.RarArchiveInputStream; import org....

    java算法,实现压缩及解压缩

    通过`java.util.zip`包提供的工具类,可以方便地实现文件压缩与解压缩操作。需要注意的是,在实际应用过程中还需要考虑异常处理、资源释放等细节问题,以确保程序的稳定性和安全性。此外,还可以进一步优化缓冲区...

    Java实现压缩解压缩文件和文件夹(附源码)

    Java实现压缩解压缩文件和文件夹(附源码) zip unzip 压缩 解压缩

    java实现rar压缩与解压缩

    在Java编程语言中,实现RAR压缩与解压缩是一项常见的任务,尤其在处理大量数据或打包文件以便于传输时。本文将深入探讨如何使用Java来实现这个功能,主要关注`FileUtil.java`文件中的代码实现。 首先,Java本身并不...

    java毕业设计——java文件压缩与解压缩实践设计与开发(源代码+论文).zip

    java毕业设计——java文件压缩与解压缩实践设计与开发(源代码+论文).zip java毕业设计——java文件压缩与解压缩实践设计与开发(源代码+论文).zip java毕业设计——java文件压缩与解压缩实践设计与开发(源代码+论文)....

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

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

    Java实现的zip压缩及解压缩工具类示例

    Java实现的zip压缩及解压缩工具类示例主要介绍了Java实现的zip压缩及解压缩工具类,结合实例形式分析了java对文件的进行zip压缩及解压缩的具体操作技巧。下面将对该工具类的实现原理和使用方法进行详细的介绍。 ...

Global site tag (gtag.js) - Google Analytics