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

来源:互联网 发布:mysql数据库创建表格 编辑:程序博客网 时间:2024/06/05 23:42
    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格式的压缩包!");              }          }      }  


  • ant.jar (1.4 MB)
  • commons-logging-1.1.1.jar (59.4 KB)
  • java-unrar-0.3.jar (129.7 KB)

原创粉丝点击