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

 

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;
        	}
        } 
	}
    
    
		
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值