用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格式的壓縮包!");     
        }     
    }     
}   

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM