???java?????zip??rar?????????y???????????
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????????????");   
        }   
    }   
}