当前位置: 代码迷 >> Java相关 >> 详解java解压缩zip跟rar的工具类使用教程
  详细解决方案

详解java解压缩zip跟rar的工具类使用教程

热度:88   发布时间:2016-04-22 19:26:13.0
详解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格式的压缩包!");             }         }     }

  

  相关解决方案