zip压缩和解压

package test20150206;
import java.io.File;  
import java.io.BufferedOutputStream;  
import java.io.BufferedInputStream;  
import java.io.FileOutputStream;  
import java.io.FileInputStream;  
import java.util.zip.ZipEntry;  
import java.util.zip.ZipInputStream;  
import java.util.zip.ZipOutputStream;  
  
/**
 *描述:该类实现文件夹压缩成zip文件和zip文件解压 
 * @author 袁意强
 *2015-2-6上午11:59:37
 */
public class Zip{   
    private ZipInputStream  zipIn;      //解压Zip   
    private ZipOutputStream zipOut;     //压缩Zip   
    private ZipEntry        zipEntry;   
    private static int      bufSize;    //size of bytes   
    private byte[]          buf;   
    private int             readedBytes;   
       
    public Zip(){   
        this(512);   
    }   
  
    public Zip(int bufSize){   
        this.bufSize = bufSize;   
        this.buf = new byte[this.bufSize];   
    }   
       
    //压缩文件夹内的文件   
    public void doZip(String zipDirectory){//zipDirectoryPath:需要压缩的文件夹名   
        File file;   
        File zipDir;   
  
        zipDir = new File(zipDirectory);   
        String zipFileName = zipDirectory + ".zip";//压缩后生成的zip文件名   
  
        try{   
            this.zipOut = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(zipFileName)));   
            handleDir(zipDir , this.zipOut);   
            this.zipOut.close();   
        }catch(Exception ioe){   
            ioe.printStackTrace();   
        }   
    }   
  
    //由doZip调用,递归完成目录文件读取  
    private void handleDir(File dir , ZipOutputStream zipOut)throws Exception{   
        FileInputStream fileIn;   
        File[] files;   
  
        files = dir.listFiles();   
        if(files.length == 0){//如果目录为空,则单独创建之.   
            //ZipEntry的isDirectory()方法中,目录以"/"结尾.   
            this.zipOut.putNextEntry(new ZipEntry(dir.toString() + "/"));   
            this.zipOut.closeEntry();   
        }   
        else{//如果目录不为空,则分别处理目录和文件.   
            for(File fileName : files){   
  
                if(fileName.isDirectory()){   
                    handleDir(fileName , this.zipOut);   
                }   
                else{   
                    fileIn = new FileInputStream(fileName);  
                    String name=dir.getName();  
                    //生成的压缩包存放在原目录下  
                    this.zipOut.putNextEntry(new ZipEntry(name+"/"+fileName.getName().toString()));  
                      
                    //此方法存放在该项目目录下  
                    //this.zipOut.putNextEntry(new ZipEntry(fileName.toString()));  
                    while((this.readedBytes=fileIn.read(this.buf))>0){  
                        this.zipOut.write(this.buf , 0 , this.readedBytes);  
                    }  
                    this.zipOut.closeEntry();   
                }   
            }   
        }   
    }   
  
    //解压指定zip文件   
    public void unZip(String unZipfileName){//unZipfileName需要解压的zip文件名   
        FileOutputStream fileOut;   
        File file;   
        String f=unZipfileName.substring(0, unZipfileName.length()-4);  
        File ff=new File(f);  
        try{   
            this.zipIn = new ZipInputStream (new   
                    BufferedInputStream(new FileInputStream(unZipfileName)));   
            while((this.zipEntry = this.zipIn.getNextEntry()) != null){   
                file = new File(this.zipEntry.getName());   
                if(this.zipEntry.isDirectory()){   
                    file.mkdirs();   
                }   
                else{   
                    //如果指定文件的目录不存在,则创建之.   
                    File parent = file.getParentFile();   
                    if(!parent.exists()){   
                        parent.mkdirs();   
                    }   
                    if(!ff.exists()){  
                        ff.mkdir();  
                    }  
                    fileOut = new FileOutputStream(f+"/"+file.getName());   
                      
//                    fileOut = new FileOutputStream("./file"); //此方法存放到该项目目录下  
                    while(( this.readedBytes = this.zipIn.read(this.buf) ) > 0){   
                        fileOut.write(this.buf , 0 , this.readedBytes );   
                    }   
                    fileOut.close();   
                }  
                  
                this.zipIn.closeEntry();  
            }  
        }catch(Exception ioe){  
            ioe.printStackTrace();   
        }  
    }   
  
    //设置缓冲区大小   
    public void setBufSize(int bufSize){   
        this.bufSize = bufSize;   
    }   
  
    //测试Zip类   
    public static void main(String[] args)throws Exception{   
        Zip zip=new Zip();  
//        zip.doZip("E:\\qwe");  
       zip.unZip("E:\\qwe.zip");  
    }   
}   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值