`
JavaSam
  • 浏览: 952144 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JAVA操作zip文件的实用工具类

    博客分类:
  • JAVA
 
阅读更多

 

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;

import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
import org.apache.tools.zip.ZipOutputStream;

import com.ibm.widgetportal.common.Constants;
/**
 * ZipUtils压缩/解压缩
 * @author km-mawenwu-t
 */
public class ZipUtils {
   
 
    public   void zip(String inputFilename, String zipFilename)   
            throws IOException {   
        zip(new File(inputFilename), zipFilename);   
    }   
 
    public   void zip(File inputFile, String zipFilename) throws IOException {   
        ZipOutputStream out = new ZipOutputStream(new FileOutputStream(   
                zipFilename));   
        try {   
            zip(inputFile, out, "");   
        } catch (IOException e) {   
            throw e;   
        } finally {   
        	if (out != null) {
        		out.close();   
        		out = null;
        	}
        }   
    }   
 
    private    void zip(File inputFile, ZipOutputStream out, String base)   
            throws IOException {   
        if (inputFile.isDirectory()) {   
            File[] inputFiles = inputFile.listFiles();   
            out.putNextEntry(new ZipEntry(base + "/"));   
            base = base.length() == 0 ? "" : base + "/";   
            for (int i = 0; i < inputFiles.length; i++) {   
                zip(inputFiles[i], out, base + inputFiles[i].getName());   
            }   
  
        } else {   
            if (base.length() > 0) {   
                out.putNextEntry(new ZipEntry(base));   
            } else {   
                out.putNextEntry(new ZipEntry(inputFile.getName()));   
            }   
            FileInputStream in = new FileInputStream(inputFile);   
            try {   
                int c;   
                byte[] by = new byte[Constants.BUFFEREDSIZE];   
                while ((c = in.read(by)) != -1) {   
                    out.write(by, 0, c);   
                }   
            } catch (IOException e) {   
                throw e;   
            } finally {  
            	if(in!=null){
            		 in.close();  
            		 in=null;
            	}
            	if(out!=null){
           		 	out.close();  
           		 	out=null;
           	    }
            }   
        }   
    }   
  
	@SuppressWarnings("unchecked")
	public   void unzip(File zipFilename, String outputDirectory)   
            throws Exception {  
    	try {
    		File outFile = new File(outputDirectory);   
    		if (!outFile.exists()) {   
    			outFile.mkdirs();   
    		} 
    		ZipFile zipFile = new ZipFile(zipFilename); 
    		Enumeration en = zipFile.getEntries();   
    		ZipEntry zipEntry = null;   
    		while (en.hasMoreElements()) {   
    			zipEntry = (ZipEntry) en.nextElement();  
    			String zipEntryString = zipEntry.toString();
    			if (zipEntry.isDirectory()) {
    				continue;
    			}
    			if (zipEntryString.indexOf("/")>0) {   
    				// mkdir directory   
    				String dirName = zipEntry.getName();   
    				dirName = dirName.substring(0, dirName.lastIndexOf("/"));   
    				File f1 = new File(outFile.getPath() + File.separator + dirName);   
    				f1.mkdirs();  
    				dirName = zipEntry.getName();
    				File f2 = new File(outFile.getPath() + File.separator + dirName);
    				f2.createNewFile();
    				copy(f2, zipFile, zipEntry);
    			} else {   
    				// unzip file   
    				File f = new File(outFile.getPath() + File.separator   
    						+ zipEntry.getName());   
    				f.createNewFile();   
    				copy(f, zipFile, zipEntry);
    			}   
    		}   
		} catch (Exception e) {
			e = new Exception("解压zip文件出错!");
			throw e;
		}
    }
    private  void copy(File f,ZipFile zipFile,ZipEntry zipEntry) throws IOException{
    	InputStream in = zipFile.getInputStream(zipEntry);   
    	FileOutputStream out =  new FileOutputStream(f);   
        try {   
            int c;   
            byte[] by = new byte[Constants.BUFFEREDSIZE];   
            while ((c = in.read(by)) != -1) {   
                out.write(by, 0, c);   
            }   
        } catch (IOException e) {   
        	throw e;
        } finally {   
        	if (out != null) {
        		out.close();
        		out = null;
        	}
        	if (in != null) {
        		in.close();
        		in = null;
        	}
        } 
	}
    
    
		
}
分享到:
评论

相关推荐

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

    Java操作Zip文件主要涉及到对文件和目录的压缩与解压缩,以及在必要时对压缩文件进行加密处理。这里我们重点讨论使用两个库:`zip4j`和`Apache Ant`来实现这些功能。 1. **zip4j库**:`zip4j-1.3.2.jar`是一个用...

    Java常用工具类.zip

    "Java常用工具类.zip"这个压缩包显然包含了一系列与Java开发相关的实用工具类,这些类可以帮助开发者更高效地处理各种常见任务。以下将对其中涉及的知识点进行详细说明: 1. **字符串工具类**:在Java中,`java....

    java开发常用工具类.zip

    "java开发常用工具类.zip" 包含了一系列这样的工具类,这些类可以帮助开发者节省时间,提高代码的可读性和可维护性。下面将详细讨论这个压缩包中可能包含的一些关键工具类和相关知识点。 1. **日期操作工具类**: ...

    java zip rar(区分有无密码的RAR文件) gz ftp工具类

    总结起来,这个项目提供了Java环境下的压缩和解压缩功能,包括ZIP、RAR(带密码)和GZ格式,以及FTP文件传输的实用工具类。开发者可以轻松地集成这些功能到他们的项目中,提高文件处理的便捷性。

    Java常用工具类大全,工作5年精心整理.zip

    "Java常用工具类大全,工作5年精心整理.zip"这个压缩包文件很可能包含了一位有经验的Java开发者在五年工作中积累的各种实用工具类,这些工具类能够极大地提高开发效率,简化代码编写。以下是对可能包含的知识点进行...

    java常用的工具类整理28个

    以上是Java中28个常用工具类的简要介绍,每个类都有丰富的功能,掌握并灵活运用它们,将极大提升你的Java编程能力。在实际开发中,根据具体需求选择合适的工具类,可以编写出高效、简洁的代码。

    JAVA解压ZIP多层目录文件(需ant.jar

    2. **打开ZIP文件**:通过`org.apache.tools.zip.ZipFile`类实例化ZIP文件对象。 ```java org.apache.tools.zip.ZipFile zipFile = new org.apache.tools.zip.ZipFile(oldDirectory); ``` 3. **遍历ZIP条目**:...

    文件批量拷贝、重命名工具类 for java.zip

    这个"文件批量拷贝、重命名工具类 for java.zip"压缩包包含两个关键的Java源代码文件:Copy_File.java和RenameFile.java,它们分别用于实现文件的批量拷贝和重命名功能。 首先,我们来看`Copy_File.java`。这个类...

    java常用工具类

    Java语言在设计时就考虑到了代码的复用...以上就是Java中的一些常用工具类,它们在日常开发中扮演着不可或缺的角色,极大地提高了开发效率和代码质量。了解并熟练使用这些工具类,对于提升Java编程技能是非常有帮助的。

    Zip文件操作类

    总结来说,`ZipUtil.java`是Java开发中用于处理`Zip`文件的一个实用工具类,它包含了创建、读取、更新和解压缩`Zip`文件的关键功能。通过熟练掌握这些操作,开发者可以有效地处理和管理文件压缩,优化存储和传输效率...

    java常用工具类和接口返回对象.zip

    本压缩包"java常用工具类和接口返回对象.zip"很可能包含了多种实用的工具方法和设计模式,如工厂模式、单例模式等,用于处理常见的任务,如字符串操作、日期时间处理、集合操作等。 1. **StringUtil**:这个工具类...

    常用工具类常用工具类.zip

    在Java编程语言中,"工具类"通常指的是包含各种实用方法的类,这些方法可以用于执行常见的编程任务,而无需创建实例。它们通常是静态方法集合,可以被不同类方便地调用,提高了代码的可复用性和效率。下面我们将深入...

    java先压缩再下载工具类

    "java先压缩再下载工具类"是一个实用的工具集,它允许开发者将一组文件打包成ZIP格式,然后提供给用户下载。这个工具类包括了核心的压缩功能以及输入/输出操作,使得在Java应用程序中执行这样的任务变得更加便捷。 ...

    Java常用工具类大全,工作5年精心整理(最新版).zip

    这份"Java常用工具类大全,工作5年精心整理(最新版).zip"文件,显然是一个集大成者的杰作,包含了作者五年工作经验中提炼出的实用工具类集合。下面,我们将深入探讨这些工具类可能涵盖的知识点,以及它们在实际...

    java常用工具类jar包和帮助文档.zip

    在这个"java常用工具类jar包和帮助文档.zip"压缩包中,包含了一些在Java开发中非常实用的工具类,以及相应的帮助文档,旨在帮助开发者更高效地进行开发工作。 1. HTTP POST请求工具类: 在Java中,进行HTTP请求...

    Java常用工具类大全

    提供了很丰富的java工具类,包括字符串、数字、日期、文件、图像、编码解码、校验工具、文档操作等。 主要分为以下几种: - 1.通用操作类,例如String、数字、日期、各种校验等 - 2.文档操作,excel、pdf等 - 3.加密...

    ZipUtil文件压缩工具类

    在Java编程语言中,`ZipUtil`文件压缩工具类是一个非常实用的工具,它利用了Java内置的`java.util.zip`包中的`ZipEntry`类来实现文件或目录的压缩功能。`ZipUtil`通常被设计为一个静态类,提供一系列静态方法,使得...

    JAVA开发27种常用工具类.zip

    "JAVA开发27种常用工具类.zip"这个压缩包很可能包含了各种实用的工具类集合,每个工具类都有其特定的用途。以下是可能包含的一些工具类及其详细说明: 1. **ArrayUtils**: 提供了处理数组的各种操作,如复制、合并...

    java常用工具类集合(也有转自他人的)

    总结来说,"java常用工具类集合"是一个涵盖了多种实用工具类的资源,包括但不限于字符串处理、集合操作、日期时间、IO操作等多个方面。通过学习和应用这些工具类,开发者能够更高效地编写代码,同时也能从开源社区中...

    Java常用工具类大全,工作5年精心整理(最新版)

    提供了很丰富的java工具类,包括字符串、数字、日期、文件、图像、编码解码、校验工具、文档操作等。 主要分为以下几种: - 1.通用操作类,例如String、数字、日期、各种校验等 - 2.文档操作,excel、pdf等 - 3.加密...

Global site tag (gtag.js) - Google Analytics