Java通过通配符查找文件


Java通过通配符查找文件代码
  1. package com.ym.test.file;   
  2.   
  3. import java.io.*;    
  4. import java.util.ArrayList;   
  5. import java.util.regex.Matcher;   
  6. import java.util.regex.Pattern;   
  7. public class FileDirectorySearch {   
  8.     /**  
  9.      * 查询指定目录下的所有文件  
  10.      * @param args  
  11.      */    
  12.     public static void main(String[] args) {    
  13. //     // TODO Auto-generated method stub   
  14.         FileDirectorySearch star=new FileDirectorySearch();    
  15. //     String path="d:";    
  16. //     File war=new File(path);    
  17. //     int count=star.findTxtFileCount(war,"exe");    
  18. //     System.out.println("----: " + count);   
  19.            
  20.         File[] files = star.getFiles("d:/share""*");   
  21.         for(int i=0;i<files.length;i++){   
  22.             System.out.println(files[i]);   
  23.         }   
  24.            
  25.     }    
  26.     /**  
  27.      * 创建查询指定目录下文件的方法  
  28.      *   
  29.      * @param allList  
  30.      *            指定目录  
  31.      * @param endName  
  32.      *            指定以“”结尾的文件  
  33.      * @return 得到的文件数目  
  34.      */    
  35.     public int findTxtFileCount(File allList,String endName){    
  36.        //    
  37.        int textCount=0;    
  38.     // 创建fileArray名字的数组   
  39.     File[] fileArray= allList.listFiles();    
  40.     // 如果传进来一个以文件作为对象的allList 返回0   
  41.     if(null==fileArray){    
  42.          return 0;    
  43.         }    
  44.     // 偏历目录下的文件   
  45.     for(int i=0;i<fileArray.length;i++){    
  46.        // 如果是个目录   
  47.            if(fileArray[i].isDirectory()){    
  48.          // System.out.println("目录: "+fileArray[i].getAbsolutePath());   
  49.             // 递归调用   
  50.             textCount+=findTxtFileCount(fileArray[i].getAbsoluteFile(),endName);    
  51.          // 如果是文件   
  52.           }else if(fileArray[i].isFile()){    
  53.          // 如果是以“”结尾的文件   
  54.          if(fileArray[i].getName().endsWith(endName)){    
  55.             // 展示文件   
  56.             System.out.println("exe文件: "+fileArray[i].getAbsolutePath());    
  57.             // 所有以“”结尾的文件相加   
  58.             textCount++;    
  59.          }    
  60.          }    
  61.     }    
  62.     return textCount;    
  63.   
  64.     }    
  65.      /**  
  66.         * 在本文件夹下查找  
  67.         * @param s String 文件名  
  68.         * @return File[] 找到的文件  
  69.         */  
  70.        public static File[] getFiles(String s)   
  71.        {   
  72.          return getFiles("./",s);   
  73.        }   
  74.          
  75.        /**  
  76.         * 获取文件  
  77.         * 可以根据正则表达式查找  
  78.         * @param dir String 文件夹名称  
  79.         * @param s String 查找文件名,可带*.?进行模糊查询  
  80.         * @return File[] 找到的文件  
  81.         */  
  82.        public static File[] getFiles(String dir,String s) {   
  83.          //开始的文件夹   
  84.          File file = new File(dir);   
  85.   
  86.          s = s.replace('.''#');   
  87.          s = s.replaceAll("#""\\\\.");   
  88.          s = s.replace('*''#');   
  89.          s = s.replaceAll("#"".*");   
  90.          s = s.replace('?''#');   
  91.          s = s.replaceAll("#"".?");   
  92.          s = "^" + s + "$";   
  93.   
  94.          System.out.println(s);   
  95.          Pattern p = Pattern.compile(s);   
  96.          ArrayList list = filePattern(file, p);   
  97.   
  98.          File[] rtn = new File[list.size()];   
  99.          list.toArray(rtn);   
  100.          return rtn;   
  101.        }   
  102.   
  103.        /**  
  104.         * @param file File 起始文件夹  
  105.         * @param p Pattern 匹配类型  
  106.         * @return ArrayList 其文件夹下的文件夹  
  107.         */  
  108.   
  109.        private static ArrayList filePattern(File file, Pattern p) {   
  110.          if (file == null) {   
  111.            return null;   
  112.          }   
  113.          else if (file.isFile()) {   
  114.            Matcher fMatcher = p.matcher(file.getName());   
  115.            if (fMatcher.matches()) {   
  116.              ArrayList list = new ArrayList();   
  117.              list.add(file);   
  118.              return list;   
  119.            }   
  120.          }   
  121.          else if (file.isDirectory()) {   
  122.            File[] files = file.listFiles();   
  123.            if (files != null && files.length > 0) {   
  124.              ArrayList list = new ArrayList();   
  125.              for (int i = 0; i < files.length; i++) {   
  126.                ArrayList rlist = filePattern(files[i], p);   
  127.                if (rlist != null) {   
  128.                  list.addAll(rlist);   
  129.                }   
  130.              }   
  131.              return list;   
  132.            }   
  133.          }   
  134.          return null;   
  135.        }   
  136.   
  137.   
  138.   
  139. }  

相关内容