java应用压缩、解压zip文件

导入java.util.zip.*数据包,

<span style="font-size:14px;">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,String savedir){//unZipfileName需要解压的zip文件名   
        FileOutputStream fileOut; 
        File zipfile=new File(unZipfileName);
        File file;   
        String zipName=zipfile.getName();
        String f=zipName.substring(0, zipName.length()-4);  
        File ff=new File(savedir+"/"+f);  
        try{   
            this.zipIn = new ZipInputStream (new   
                    BufferedInputStream(new FileInputStream(unZipfileName)));   
            while((this.zipEntry = this.zipIn.getNextEntry()) != null){   
                file = new File(ff+"\\"+this.zipEntry.getName());  
                System.out.println("zip:"+this.zipEntry.getName());
                if(this.zipEntry.isDirectory()){
               //     file.mkdirs();
                    System.out.println(file.getAbsolutePath());
                    File dir=new File(ff+"\\"+this.zipEntry.getName());
                    System.out.println("dir "+dir.getAbsolutePath());
                }   
                else{   
                    //如果指定文件的目录不存在,则创建之.   
                    File parent = file.getParentFile();   
                    System.out.println("parent:"+parent +" "+file);
                    
                    if(parent!=null){
	                    if(!parent.exists()){   
	                        parent.mkdirs();  
	                        System.out.println("parentpath "+parent.getAbsolutePath());
	                    }   
                    }
                    if(!ff.exists()){  
                        ff.mkdir();  
                    }  
           //         System.out.println(ff+"\\"+file.getName());
                    fileOut = new FileOutputStream(file);   
                      
                    //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.unZip("E:\\page\\baidu.zip","C:\\Users\\lmy\\Desktop");  
    }   </span>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值