`

java zip操作

    博客分类:
  • j2ee
阅读更多
1.基本解压,压缩操作
package com.jason.zip;

import com.jason.j2ee.encode.ChangeCharset;
import org.apache.tools.zip.ZipOutputStream;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

/**
 * Created by IntelliJ IDEA.
 * User: jason
 * Date: 2010-6-23
 * Time: 15:27:21
 */
public class CompressToZip {
      public void zip(String inputFileName) throws Exception {   
         String zipFileName = "d:\\批量打包.zip";// 打包后文件名字   
         System.out.println(zipFileName);   
         zip(zipFileName, new File(inputFileName));   
   
     }   
   
     private void zip(String zipFileName, File inputFile)throws Exception {   
         ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFileName));
         out.setEncoding(ChangeCharset.UTF_8);
         zip(out, inputFile, "");   
         System.out.println("zip done");   
         out.close();   
     }   
        
   
     private void zip(ZipOutputStream out, File f, String base) throws Exception {
         if (f.isDirectory()) {   
             File[] fl = f.listFiles();
             System.out.println("新增目录元素   " +base+ "/");   
             out.putNextEntry(new org.apache.tools.zip.ZipEntry(base + "/"));   
             base = base.length() == 0 ? "" : base + "/";   
             for (int i = 0; i < fl.length; i++) {   
                 zip(out, fl[i], base + fl[i].getName());   
             }   
         } else {
             String fileName = ChangeCharset.changeCharset(base, ChangeCharset.UTF_8);
             System.out.println("新增普通文件元素   " +fileName);
             out.putNextEntry(new org.apache.tools.zip.ZipEntry(fileName));
             FileInputStream in = new FileInputStream(f);
             int b;   
             while ((b = in.read()) != -1) {   
                 out.write(b);   
             }   
             in.close();
         }   
     }   
   
     public static void main(String[] args) {   
         CompressToZip test = new CompressToZip();   
         try {   
             test.zip("d:\\tmp");   
         } catch (Exception e) {   
             e.printStackTrace();   
         }   
     }   
}


2.基于Java Zip技术压缩目录或文件
package com.jason.zip;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

/**
* 基于Java Zip技术压缩目录或文件.
* 该压缩技术支持多级目录的压缩,使用递归算法.
* 问题是不支持中文,如果想要支持中文,请使用Ant的Zip技术.
*
* Created by IntelliJ IDEA.
 * User: jason
 * Date: 2010-6-23
 * Time: 15:22:46
*/
public class ZipMultiDirectoryCompress {

    /**
     * @param args
     */
    public static void main(String[] args) {
        //初始化支持多级目录压缩的ZipMultiDirectoryCompress
        ZipMultiDirectoryCompress zipCompress = new ZipMultiDirectoryCompress();
        //压缩目录,可以指向一个文件
        String directory = "C:/computer";
        //生成的压缩文件
        String destFile = "c:/computer.zip";
        //默认的相对地址,为根路径
        String defaultParentPath = "";
        ZipOutputStream zos = null;
        try {
            //创建一个Zip输出流
            zos = new ZipOutputStream(new FileOutputStream(destFile));
            //启动压缩进程
            zipCompress.startCompress(zos,defaultParentPath,directory);
        } catch (FileNotFoundException e){
            e.printStackTrace();
        } finally{
            try {
                if(zos != null)zos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }

    /**
     * 开始压缩.
     *
     * @param zos ZipOutputStream
     * @param oppositePath 相对路径,开始时相对路径为空
     * @param directory 压缩目录,也可能是文件
     */
    public void startCompress(ZipOutputStream zos, String oppositePath, String directory){
        File file = new File(directory);
        if(file.isDirectory()){
            //如果是压缩目录
            File[] files = file.listFiles();
            for(int i=0;i<files.length;i++){
                File aFile = files[i];
                if(aFile.isDirectory()){
                    //如果是目录,修改相对地址
                    String newOppositePath = oppositePath + aFile.getName() + "/";
                    //创建目录
                    compressDirectory(zos, oppositePath, aFile);
                    //进行递归调用
                    startCompress(zos,newOppositePath,aFile.getPath());
                } else {
                    //如果不是目录,则进行压缩
                    compressFile(zos,oppositePath,aFile);
                }
            }
        } else {
            //如果是压缩文件,直接调用压缩方法进行压缩
            compressFile(zos,oppositePath,file);
        }
    }

    /**
     * 压缩文件.
     *
     * @param zos ZipOutputStream
     * @param oppositePath 相对于路路径
     * @param file 压缩的文件
     */
    public void compressFile(ZipOutputStream zos, String oppositePath, File file){
        //创建一个Zip条目,每个Zip条目都是必须相对于根路径
        ZipEntry entry = new ZipEntry(oppositePath + file.getName());
        InputStream is = null;
        try{
            //将条目保存到Zip压缩文件当中
            zos.putNextEntry(entry);
            //从文件输入流当中读取数据,并将数据写到输出流当中.
            is = new FileInputStream(file);
            int length = 0;
            int bufferSize = 1024;
            byte[] buffer = new byte[bufferSize];
            while((length=is.read(buffer,0,bufferSize))>=0){
                zos.write(buffer, 0, length);
            }
            zos.closeEntry();
        }catch(IOException ex){
            ex.printStackTrace();
        } finally {
            try{
                if(is != null)is.close();
            }catch(IOException ex){
                ex.printStackTrace();
            }
        }
    }

    /**
     * 在压缩文件当中创建一个新的压缩目录,支持空目录.
     *
     * @param zos
     * @param oppositePath
     * @param file
     */
    public void compressDirectory(ZipOutputStream zos, String oppositePath, File file){
        //压缩目录,这是关键,创建一个目录的条目时,需要在目录名后面加多一个"/"
        ZipEntry entry = new ZipEntry(oppositePath + file.getName() + "/");
        try {
            zos.putNextEntry(entry);
            zos.closeEntry();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
分享到:
评论

相关推荐

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

    在Java ZIP操作中,虽然我们可以直接使用`java.util.zip`库,但Ant提供了更高级的构建脚本和任务,例如`zip`和`unzip`任务,使得文件打包和解包更加方便。以下是一个Ant构建文件(`build.xml`)的简单示例,用于压缩...

    zip4j--Java操作zip压缩文件接口

    Java操作zip压缩格式的开源项目,功能强大而且使用方便,能完全满足Java操作Zip压缩文件,官方网址为:http://www.lingala.net/zip4j/ 可以下载到jar包、源码和示例,好像没有提供API文档。 不过需要使用代理访问...

    java 操作Zip文件(压缩、解压、加密).zip

    这两个库各有优势,`zip4j`更专注于Zip操作,提供更丰富的API和加密功能,而`Apache Ant`则在构建自动化方面更强大。根据项目需求,可以选择合适的库或结合两者使用。记住,使用任何库时都要注意版本兼容性和安全性...

    基于Java向zip压缩包追加文件

    通过上述步骤,可以实现基于Java向ZIP压缩包追加文件的功能,虽然这个过程涉及解压和再压缩,但它是最常见的解决方案,因为Java的标准库不直接支持追加操作。在实际应用中,可以根据具体需求进行优化和调整,以满足...

    java Zip压缩解压

    Java中的Zip压缩与解压是常见的文件操作技术,主要用于数据的存储和传输。Apache Ant的jar包和JUnit单元测试框架在此过程中起到了辅助作用。在Java中处理Zip文件,主要涉及`java.util.zip`包下的几个类,如`...

    java操作zip_包括加解密码

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

    java zip文件加密

    Java Zip文件加密是一种重要的安全措施,它允许程序员在创建或修改Zip文件时添加一层保护,以防止未经授权的访问。在Java中,我们可以使用内置的`java.util.zip`库来实现这个功能。本篇文章将深入探讨如何在Java中对...

    zipJava.zip

    在IT行业中,尤其是在软件开发领域,打包文件成压缩格式如ZIP是常见的操作。Java作为一种广泛使用的编程语言,提供了丰富的API来处理这样的任务。本篇将深入讲解如何使用Java实现将文件打包成ZIP的过程,主要围绕...

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

    在Java中,`java.util.zip`包提供了对ZIP文件的基本操作,但默认使用的是平台默认的字符集,这可能在跨平台操作时引发乱码问题。 为了解决这个中文乱码问题,我们需要在创建ZipEntry时指定合适的字符集,通常是UTF-...

    仿zip压缩软件的java代码|zip.rar

    以上是对这个项目的详细解析,对于想要深入理解Java ZIP操作和GUI编程的开发者来说,这是一个很好的学习资源。通过阅读和分析这些代码,你可以了解到如何在Java中实现文件的压缩、解压缩、分割以及进度反馈,同时也...

    java读取zip文件

    在Java编程环境中,读取ZIP文件是一项...通过熟练掌握`java.util.zip`包中的类,你可以轻松应对各种ZIP文件操作。在学习和参考项目示例源代码时,确保理解每一步的作用,这将有助于你在实际工作中更好地应用这些知识。

    java 打zip包

    在Java编程语言中,创建ZIP压缩包是一项常见的任务,特别是在软件开发中,如构建Web应用程序。本资源提供了一种解决方案,解决了使用Java打zip包时可能会遇到的中文乱码和包含空文件的问题。以下是关于这个主题的...

    java Zip打包完整例子

    Java中的Zip打包主要涉及到对文件或文件夹进行压缩处理,这是一种常见的数据存储和传输方式。在Java中,我们可以使用内置的`java.util.zip`包来实现这个功能。下面将详细介绍如何使用Java进行Zip打包,以及涉及到的...

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

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

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

    在Java编程中,有时我们需要对已经存在的ZIP文件进行操作,比如替换其中的某个文件,而无需将整个ZIP文件解压后再重新压缩。这样的需求在处理大量数据或优化性能时尤其重要,因为它避免了创建临时文件和多次I/O操作...

    Java实现Zip压缩文件操作的工具类.zip

    Java实现Zip压缩文件操作的工具类 文章介绍:https://blog.csdn.net/rongbo91/article/details/117747042 (可作为Jar依赖包直接使用) 1、项目使用前,请进入rdc-bom目录下,执行mvn clean install命令  2、可...

    java zipentry.jar 解决解压失败问题

    ZIP文件内部通常使用UTF-8编码来存储文件名和路径,但并非所有ZIP工具都遵循这个标准,有的可能使用本地操作系统默认编码,比如GBK或ISO-8859-1。这就可能导致在Java中解压包含非ASCII字符(如中文)的ZIP文件时出现...

    java解压zip压缩文件

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

    JAVA ZIP压缩打包下载

    标题“JAVA ZIP压缩打包下载”指的是使用Java编程语言来实现ZIP文件的压缩和打包功能。在Java中,我们可以使用java.util.zip包中的ZipOutputStream类来完成这个任务。这个过程涉及读取文件,创建ZIP输出流,并将文件...

Global site tag (gtag.js) - Google Analytics