你的位置:首页 > Java教程

[Java教程]详解java解压缩zip和rar的工具类使用教程


详解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格式的压缩包!");       }     }   }