JAVA 压缩解压文件

package com.util;

import java.io.BufferedInputStream;  
import java.io.File;  
import java.io.FileInputStream;  
import java.io.FileOutputStream;  
import java.io.IOException;  
import java.io.InputStream;  
import java.io.OutputStream;  
import java.net.URL;
import java.util.Enumeration;  
import java.util.zip.CRC32;  
import java.util.zip.CheckedOutputStream;  
import java.util.zip.ZipEntry;  
import java.util.zip.ZipFile;  
import java.util.zip.ZipOutputStream;  

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServlet;

 
/** 
 * 解压缩文件 
 *  
 */  


public class Zip  extends HttpServlet {  
    /**
	 * 
	 */
	private static final long serialVersionUID = 5142373267185568029L;



	/** 
     * 压缩文件为zip格式 
     *  
     * @paramzipFile 压缩文件后的文件名 
     * @paramsrcPathName 待压缩文件 
     * @throws IOException 
     *             文件不存在异常 
     */  
    public static void zipFile(String srcPathName) throws IOException {
    	
        File file = new File(srcPathName);  
        if (!file.exists())  
            throw new RuntimeException(srcPathName + "not exist!");  
        //System.out.println(srcPathName);
        FileOutputStream fileOutputStream = new FileOutputStream(srcPathName+".zip");  
        
        CheckedOutputStream cos = new CheckedOutputStream(fileOutputStream, new CRC32());  
        ZipOutputStream out = new ZipOutputStream(cos);    
        String basedir = "";  
        compress(file, out, basedir);  
        out.flush();  
        out.close();  
    }  
  
    private static void compress(File file, ZipOutputStream out, String basedir) throws IOException {  
        if (file.isDirectory()) {  
            compressDirectory(file, out, basedir);  
        } else {  
            compressFile(file, out, basedir);  
        }  
    }  
  
    private static void compressDirectory(File dir, ZipOutputStream out, String basedir) throws IOException {  
        if (!dir.exists())  
            return;  
        File[] files = dir.listFiles();  
        for (int i = 0; i < files.length; i++) {  
            compress(files[i], out, basedir + dir.getName() + "/");  
        }  
    }  
  
    private static void compressFile(File file, ZipOutputStream out, String basedir) throws IOException {  
        if (!file.exists()) {  
            return;  
        }  
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));  
        ZipEntry entry = new ZipEntry(basedir + file.getName());  
        out.putNextEntry(entry);  
        int len = 0;  
        byte data[] = new byte[1024];  
        while ((len = bis.read(data)) != -1) {  
            out.write(data, 0, len);  
        }  
        bis.close();  
    }  
  
    private static void createDir(String path) {  
        File dir = new File(path);  
        if (dir.exists() == false)  
            dir.mkdir();  
    }  
  
    private static String getSuffixName(String name) {  
        return name.substring(0, name.lastIndexOf("."));  
    }  
  
    /** 
     * 解压缩文件  
      * @throws IOException 
     * 文件读写异常 
      */  
    public static void unZip(String zipFilePath) throws IOException {  
        File file = new File(zipFilePath+".zip");  
        ZipFile zipFile = new ZipFile(file);  
        
        File unzipFile = new File(zipFilePath);
        if (unzipFile.exists())  
            unzipFile.delete();  
            unzipFile.mkdirs();  
        
        Enumeration zipEnum = zipFile.entries();  
        InputStream input = null;  
        OutputStream output = null;  
        ZipEntry entry = null;  
        while (zipEnum.hasMoreElements()) {  
            entry = (ZipEntry) zipEnum.nextElement();  
            String entryName = new String(entry.getName());  
            String names[] = entryName.split("\\/");  
            int length = names.length;  
            String path = unzipFile.getAbsolutePath();  
            for (int v = 0; v < length; v++) {  
                if (v < length - 1) {  
                    path += "/" + names[v] + "/";  
                    createDir(path);  
                } else {  
                    if (entryName.endsWith("/"))  
                        createDir(unzipFile.getAbsolutePath() + "/" + entryName);  
                    else {  
                        input = zipFile.getInputStream(entry);  
                        output = new FileOutputStream(new File(unzipFile.getAbsolutePath() + "/" + entryName));  
                        byte[] buffer = new byte[1024 * 8];  
                        int readLen = 0;  
                        while ((readLen = input.read(buffer, 0, 1024 * 8)) != -1)  
                            output.write(buffer, 0, readLen);  
                        input.close();  
                        output.flush();  
                        output.close();  
                    }  
                }  
            }  
        }  
    }  
    
    
    
    
    public static void main(String[] args) {
    	 
    	Zip zip=new Zip();
    	
    	//String path=zip.getClassPath();//System.getProperty("user.dir");
        
       
         try {
        	  String path=zip.findServerPath();   
        	  //System.out.println(path);
    		 //压缩
		 //zip.zipFile(path+"testzip");//路径+文件名
                      // 解压
      	            //zip.unZip(path+"testzip");
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    	   
     }
    
    
    /**
     * 获取服务器端的webapps路径
     * @return
     */
    public  String findServerPath() throws Exception{
    	 String path=this.getServletContext().getRealPath("/");
     return path;
    }
    
   
    
    /**
     * 得到本类物理路径所在文件夹
     * @return
     */
    private  String getClassPath()throws Exception{ 
        String strClassName = getClass().getName(); 
        String strPackageName = ""; 
        if(getClass().getPackage() != null) { 
            strPackageName = getClass().getPackage().getName(); 
        } 
        String strClassFileName = ""; 
        if(!"".equals(strPackageName)){
            strClassFileName = strClassName.substring(strPackageName.length() + 1,strClassName.length()); 
        } 
        else { 
            strClassFileName = strClassName; 
        } 
        URL url = null; 
        url = getClass().getResource(strClassFileName + ".class"); 
        String strURL = url.toString();
        //String middleString = System.getProperty("file.separator"); // 取得操作系统路径分割符
        strURL = strURL.substring(strURL.indexOf( "/" ) + 1,strURL.lastIndexOf( "/" ));
        return strURL; 
    }
    
    
} 

你可能感兴趣的:(java)