java方法解压rar

package com.ssm.util;
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import de.innosystec.unrar.Archive;
import de.innosystec.unrar.rarfile.FileHeader;

  /*

   * 需要引入java.unrar-0.3.jar和commons-logging.jar

   */

public class unrar{ 

    private static List<PageData> FileNamelist=new ArrayList<PageData>();

   public static List<PageData> getFileNamelist() {
        return FileNamelist;
    }

    public static void setFileNamelist(List<PageData> fileNamelist) {
        FileNamelist = fileNamelist;
    }


        public static void main(String[] args) throws Exception{
        
               unrar unra=new unrar();
               File f1=new File("C:\\poi\\abc.rar");
               File f2=new File("C:\\poi\\abc");
               unra.unrar(f1,f2);
        
           }

  


        /**
         * 
         * @param sourceRar rar解压文件的路径
         * @param destDir    解压到的文件路径
         */

        public static void unrar(File sourceRar,File destDir) throws Exception { 
            
        
                List<PageData> Filelist=new ArrayList<PageData>();
            
               Archive archive = null; 
        
               FileOutputStream fos = null; 
        
               System.out.println("Starting..."); 
        
               try { 
        
                   archive = new Archive(sourceRar); 
        
                   FileHeader fh = archive.nextFileHeader(); 
        
                   int count = 0; 
        
                   File destFileName = null; 
        
                   while (fh != null) { 

              

               

               

               String compressFileName=""; 

               

               System.out.println(fh.isUnicode());

               // 判断文件路径是否有中文

               if(existZH(fh.getFileNameW())){

                  System.out.println((++count) + ") "+ fh.getFileNameW());
                compressFileName =fh.getFileNameW().trim(); 
                PageData pd=new PageData();
                pd.put("file", fh.getFileNameW());
                Filelist.add(pd);
               }else{ 

                 System.out.println((++count) + ") "+ fh.getFileNameString());

                compressFileName =fh.getFileNameString().trim();   
                PageData pd=new PageData();
                pd.put("file", fh.getFileNameW());
                Filelist.add(pd);
               } 

 

               destFileName = new File(destDir.getAbsolutePath() + "/" +compressFileName); 

               if (fh.isDirectory()) { 

                    if (!destFileName.exists()){ 

                       destFileName.mkdirs(); 

                    } 

                    fh =archive.nextFileHeader(); 

                    continue; 

               }  

               if (!destFileName.getParentFile().exists()) { 

                   destFileName.getParentFile().mkdirs(); 

                } 

               fos = new FileOutputStream(destFileName); 

               archive.extractFile(fh, fos); 

               fos.close(); 

               fos = null; 

               fh = archive.nextFileHeader(); 

           } 

 

            archive.close(); 

           archive = null; 

           System.out.println("Finished !"); 

        }catch (Exception e) { 

           throw e; 

        }finally { 

           if (fos != null) { 

               try { 

                    fos.close(); 

                    fos = null; 

               } catch (Exception e) { 

                    //ignore 

               } 

           } 

           if (archive != null) { 

               try { 

                    archive.close();  

                    archive = null; 

               } catch (Exception e) { 

                    //ignore 

               } 

           } 

       } 
               unrar.setFileNamelist(Filelist);
    }

    // 判断路径是否带中文

    public static boolean existZH(String str) { 

       String regEx = "[\\u4e00-\\u9fa5]"; 

       Pattern p = Pattern.compile(regEx); 

       Matcher m = p.matcher(str); 

       while (m.find()) { 

           return true; 

       } 

       return false; 

    }

   

}

 

jar :链接:https://pan.baidu.com/s/1RuVbrLFfJwKm1w3ycnOQ6Q 密码:d0a5

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值