获取zip包内的目录和文件名

java 代码
 
  1. import java.io.IOException;   
  2. import java.util.ArrayList;   
  3. import java.util.Enumeration;   
  4. import java.util.List;   
  5. import java.util.StringTokenizer;   
  6.   
  7. import org.apache.tools.zip.ZipEntry;   
  8. import org.apache.tools.zip.ZipFile;   
  9.   
  10.   
  11. public class ZipSearch {   
  12.   
  13.     /**  
  14.      * @param args  
  15.      * @coding by sunlifan at 2007.7.25  
  16.      */  
  17.     private List list = new ArrayList();   
  18.   
  19.     public List zipLibSearch(String rootName, int searchlibNum) {   
  20.   
  21.         ZipFile slf_file = null;   
  22.         try {   
  23.             slf_file = new ZipFile(rootName);   
  24.         } catch (Exception e) {   
  25.             // TODO: handle exception   
  26.         }   
  27.         Enumeration e = slf_file.getEntries();   
  28.         while (e.hasMoreElements()) {   
  29.             ZipEntry slf_zipEntry = (ZipEntry) e.nextElement();   
  30.             if (slf_zipEntry.isDirectory()) {   
  31.                 StringTokenizer st = new StringTokenizer(slf_zipEntry.getName(),   
  32.                         "/");   
  33.                    
  34.                 int k = st.countTokens();   
  35.                    
  36.                 if (k >= 1) {   
  37.                     List slf_temp = new ArrayList();   
  38.                     while (st.hasMoreTokens()) {   
  39.                            
  40.                         slf_temp.add(st.nextToken());   
  41.                     }   
  42.                        
  43.                     if (slf_temp.size() > searchlibNum) {   
  44.                         if (list.contains(slf_temp.get(searchlibNum)) == false) {   
  45.                             list.add(slf_temp.get(searchlibNum));   
  46.                                
  47.                         }   
  48.                     }   
  49.                        
  50.                 }   
  51.             } else {   
  52.                 if (slf_zipEntry.getSize() < 10240) {   
  53.                     System.out.println("压缩包内的文件大小不符合规范");   
  54.                     try {   
  55.                         slf_file.close();   
  56.                     } catch (IOException e1) {   
  57.                         // TODO 自动生成 catch 块   
  58.                         e1.printStackTrace();   
  59.                     }   
  60.                     return null;   
  61.                 }   
  62.             }   
  63.   
  64.         }   
  65.         try {   
  66.             slf_file.close();   
  67.         } catch (IOException e1) {   
  68.             // TODO 自动生成 catch 块   
  69.             e1.printStackTrace();   
  70.         }   
  71.         return list;   
  72.     }   
  73.     public List getZipFile(String rootName)   
  74.     {   
  75.         ZipFile slf_zipFile=null;   
  76.         try {   
  77.             slf_zipFile=new ZipFile(rootName);   
  78.         } catch (IOException e) {   
  79.             // TODO 自动生成 catch 块   
  80.             e.printStackTrace();   
  81.         }   
  82.         Enumeration e=slf_zipFile.getEntries();   
  83.         while(e.hasMoreElements())   
  84.         {   
  85.             ZipEntry slf_zipEntry=(ZipEntry)e.nextElement();   
  86.             if(!slf_zipEntry.isDirectory())   
  87.             {   
  88.                 String filename=slf_zipEntry.getName().substring(slf_zipEntry.getName().lastIndexOf("/")+1, slf_zipEntry.getName().length());   
  89.                 list.add(filename);   
  90.             }   
  91.         }   
  92.         return list;   
  93.     }   
  94. }  

list中存放根目录下每一级的目录名,通过searchlibNum参数可获取想要的那一级目录的全部文件夹名

此方法并对根目录下所有文件的大小进行了匹对

下面是匹对的方法:

目录比对

java 代码
  1. public List compare(List list, int userIndex, List fileList) {   
  2.         List slf_noTreeList = new ArrayList();   
  3.         String[] all=(String[]) list.get(userIndex);   
  4.         List slf_hasTreeList = new ArrayList();   
  5.         for (int userIndex2 = 0; userIndex2 < all.length; userIndex2++)   
  6.             getUserLib: {   
  7.                 for (int fileTree = 0; fileTree < fileList.size(); fileTree++) {   
  8.                     // 获取文件包中的目录   
  9.                     if (fileList.get(fileTree).toString().matches(   
  10.                             all[userIndex2])) {   
  11.                            
  12.                         fileList.remove(all[userIndex2]);// 如果目录与用户的要求匹配,则下面不需再匹配这个目录   
  13.                         slf_hasTreeList.add(all[userIndex2]);   
  14.                         break getUserLib;   
  15.   
  16.                     } else {   
  17.                         if (slf_noTreeList.contains(all[userIndex2]) == false) {   
  18.                             slf_noTreeList.add(all[userIndex2]);   
  19.   
  20.                         }   
  21.   
  22.                     }   
  23.                 }   
  24.             }   
  25.   
  26.         for (int i = 0; i < slf_hasTreeList.size(); i++) {   
  27.             if (slf_noTreeList.contains(slf_hasTreeList.get(i))) {   
  28.                 slf_noTreeList.remove(slf_hasTreeList.get(i));   
  29.   
  30.             }   
  31.         }   
  32.         return slf_noTreeList;   
  33.     }  

文件名比对

 

java 代码
  1. public List fileNameCheck(String[] fileName, String fileRoot) {   
  2.         List slf_dirFilesList = new ArrayList();   
  3.         List slf_fileList=new ArrayList();   
  4.         slf_fileList=zipSearch.getZipFile(fileRoot);   
  5.         String str = null;   
  6.         for (int i = 0; i < fileName.length; i++) {   
  7.             if (slf_fileList.contains(fileName[i]) == false) {   
  8.                 str = fileName[i] + "不存在";   
  9.                 slf_dirFilesList.add(str);   
  10.             }   
  11.         }   
  12.         return slf_dirFilesList;   
  13.     }  

结果集处理:

java 代码
  1. public List SeacherResult(List userInfoSeach, String fileName) {   
  2.         int needTreeNum = userInfoSeach.size();   
  3.         FileCheckTree slf_fileCheckTree = new FileCheckTree();   
  4.         List list = new ArrayList();   
  5.         List resultlist = new ArrayList();   
  6.            
  7.         List slf_noTreeList = new ArrayList();   
  8.                 for (int nowSeachTree = 1; nowSeachTree <= needTreeNum; nowSeachTree++)   
  9.                 b:{   
  10.                                     //System.out.println(needTreeNum);   
  11.                         list = zipSearch.zipLibSearch(fileName, nowSeachTree-1);   
  12.                    
  13.                 if(list!=null)   
  14.                 {   
  15.                        
  16.                     if(list.size()==0)   
  17.                     {   
  18.                         slf_result = "此文件目录不完整,请检查......";   
  19.                         resultlist.add(slf_result);   
  20.                         return resultlist;//fileSeach.fileTreeChoose(fileName, nowSeachTree);   
  21.                     }else{   
  22.                         slf_noTreeList = slf_fileCheckTree.compare(userInfoSeach,nowSeachTree - 1, list);   
  23.                         if (!slf_noTreeList.isEmpty()) {   
  24.                             for (int i = 0; i < slf_noTreeList.size(); i++) {   
  25.                                 slf_result = "第" + nowSeachTree + "层的"+ slf_noTreeList.get(i) + "目录不存在";   
  26.                                 resultlist.add(slf_result);   
  27.                                    
  28.                             }   
  29.                         }   
  30.                         else{   
  31.                             if(nowSeachTree==needTreeNum&&needTreeNum==1)   
  32.                             {   
  33.                                 return null;   
  34.                             }   
  35.                             else{   
  36.                                 resultlist=null;   
  37.                                 break b;   
  38.                             }   
  39.                         }   
  40.                     }   
  41.                 }   
  42.                 else{   
  43.                     slf_result="压缩包内文件大小不符合规范,请检查.......";   
  44.                     resultlist.add(slf_result);   
  45.                     return resultlist;   
  46.                 }   
  47.                    
  48.             }   
  49.             if(resultlist==null)   
  50.             {   
  51.                 return null;   
  52.             }   
  53.             else{   
  54.                 return resultlist;   
  55.             }   
  56.     }  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值