• 用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格式的压缩包!");     
            }     
        }     
    }   
  • 相关阅读:
    搭建自己的博客(三十一):为评论以及回复添加邮箱提醒
    gl-transitions 【68个转场效果图】
    frei0r-1.7.0 20191207-0d4b342 DLLs
    Win10资源管理器始终使用详细视图模式
    gcc posix sjij for MSYS 9.2.1+
    mingw32-gcc-9.2.1-i686-posix-sjlj-20190904-8ba5c53
    Newtonsoft.Json高级用法
    在线文档预览方案-office web apps
    我的前端学习历程
    我是怎么使用最短路径算法解决动态联动问题的
  • 原文地址:https://www.cnblogs.com/MrLiu2016/p/7205526.html
Copyright © 2020-2023  润新知