用java解压缩zip和rar的工具类

package decompress;   
  
import java.io.File;   
import java.io.FileOutputStream;   
  
import org.apache.tools.ant.Project;   
import org.apache.tools.ant.taskdefs.Expand;   
  
import de.innosystec.unrar.Archive;   
import de.innosystec.unrar.rarfile.FileHeader;   
  
public class DeCompressUtil {   
   /**  
    * 解压zip格式压缩包  
    * 对应的是ant.jar  
    */  
   private static void unzip(String sourceZip,String destDir) throws Exception{   
       try{   
           Project p = new Project();   
           Expand e = new Expand();   
           e.setProject(p);   
           e.setSrc(new File(sourceZip));   
           e.setOverwrite(false);   
           e.setDest(new File(destDir));   
           /*  
           ant下的zip工具默认压缩编码为UTF-8编码,  
           而winRAR软件压缩是用的windows默认的GBK或者GB2312编码  
           所以解压缩时要制定编码格式  
           */  
           e.setEncoding("gbk");   
           e.execute();   
       }catch(Exception e){   
           throw e;   
       }   
   }   
   /**  
    * 解压rar格式压缩包。  
    * 对应的是java-unrar-0.3.jar,但是java-unrar-0.3.jar又会用到commons-logging-1.1.1.jar  
    */  
   private static void unrar(String sourceRar,String destDir) throws Exception{   
       Archive a = null;   
       FileOutputStream fos = null;   
       try{   
           a = new Archive(new File(sourceRar));   
           FileHeader fh = a.nextFileHeader();   
           while(fh!=null){   
               if(!fh.isDirectory()){   
                   //1 根据不同的操作系统拿到相应的 destDirName 和 destFileName   
                   String compressFileName = fh.getFileNameString().trim();   
                   String destFileName = "";   
                   String destDirName = "";   
                   //非windows系统   
                   if(File.separator.equals("/")){   
                       destFileName = destDir + compressFileName.replaceAll("\\\\", "/");   
                       destDirName = destFileName.substring(0, destFileName.lastIndexOf("/"));   
                   //windows系统    
                   }else{   
                       destFileName = destDir + compressFileName.replaceAll("/", "\\\\");   
                       destDirName = destFileName.substring(0, destFileName.lastIndexOf("\\"));   
                   }   
                   //2创建文件夹   
                   File dir = new File(destDirName);   
                   if(!dir.exists()||!dir.isDirectory()){   
                       dir.mkdirs();   
                   }   
                   //3解压缩文件   
                   fos = new FileOutputStream(new File(destFileName));   
                   a.extractFile(fh, fos);   
                   fos.close();   
                   fos = null;   
               }   
               fh = a.nextFileHeader();   
           }   
           a.close();   
           a = null;   
       }catch(Exception e){   
           throw e;   
       }finally{   
           if(fos!=null){   
               try{fos.close();fos=null;}catch(Exception e){e.printStackTrace();}   
           }   
           if(a!=null){   
               try{a.close();a=null;}catch(Exception e){e.printStackTrace();}   
           }   
       }   
   }   
   /**  
    * 解压缩  
    */  
   public static void deCompress(String sourceFile,String destDir) throws Exception{   
       //保证文件夹路径最后是"/"或者"\"   
       char lastChar = destDir.charAt(destDir.length()-1);   
       if(lastChar!='/'&&lastChar!='\\'){   
           destDir += File.separator;   
       }   
       //根据类型,进行相应的解压缩   
       String type = sourceFile.substring(sourceFile.lastIndexOf(".")+1);   
       if(type.equals("zip")){   
           DeCompressUtil.unzip(sourceFile, destDir);   
        }else if(type.equals("rar")){   
            DeCompressUtil.unrar(sourceFile, destDir);   
        }else{   
            throw new Exception("只支持zip和rar格式的压缩包!");   
        }   
    }   
} 


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值