Java 通配符匹配查找文件

    找了半天,网上也没有找到一个有用的,很多复杂的进行词法分析,结果还是存在很多问题。后来只好自己想办法了。比较了一下Java正则表达式与通配符之间的差别,很简单的进行了一下转化就行了。此外要注意String的replace和replaceAll的用法的含义,不要搞错了。啥也不讲了,有程序为证。

 1    //字符串匹配例子
 2
 3      String s = "*txt.*";
 4      s = s.replace('.''#');
 5      s = s.replaceAll("#""\\\\.");
 6      s = s.replace('*''#');
 7      s = s.replaceAll("#"".*");
 8      s = s.replace('?''#');
 9      s = s.replaceAll("#"".?");
10      s = "^" + s + "$";
11    
12      System.out.println(s);
13      Pattern p = Pattern.compile(s);
14    
15      ArrayList list = new ArrayList();
16      list.add("aabc.txt");
17      list.add("sdfsdfaabc.txt.asdasd");
18      list.add("aabcd.txt");
19      list.add("aabcdtxt.sadf");
20      list.add("abc.txt");
21    
22      Matcher fMatcher = null;
23      String s1 = null;
24      int size = list.size();
25      for(int i=0;i<size;i++)
26      {
27        s1 = (String)list.get(i);
28        fMatcher = p.matcher(s1);
29        if(fMatcher.matches())
30        {
31          System.out.println(s1);
32        }

33      }

34
35

实用的模糊(通配符)文件查找程序
 1import java.io.File;
 2import java.util.regex.Matcher;
 3import java.util.regex.Pattern;
 4import java.util.ArrayList;
 5
 6/**
 7* <p>Title: FileService </p>
 8* <p>Description: 获取文件 </p>
 9* <p>Copyright: Copyright (c) 2007</p>
10* <p>Company: </p>
11@author not attributable
12@version 1.0
13*/

14public class FileService {
15   public FileService() {
16   }

17
18   /**
19    * 在本文件夹下查找
20    * @param s String 文件名
21    * @return File[] 找到的文件
22    */

23   public static File[] getFiles(String s)
24   {
25     return getFiles("./",s);
26   }

27  
28   /**
29    * 获取文件
30    * 可以根据正则表达式查找
31    * @param dir String 文件夹名称
32    * @param s String 查找文件名,可带*.?进行模糊查询
33    * @return File[] 找到的文件
34    */

35   public static File[] getFiles(String dir,String s) {
36     //开始的文件夹
37     File file = new File(dir);
38
39     s = s.replace('.''#');
40     s = s.replaceAll("#""\\\\.");
41     s = s.replace('*''#');
42     s = s.replaceAll("#"".*");
43     s = s.replace('?''#');
44     s = s.replaceAll("#"".?");
45     s = "^" + s + "$";
46
47     System.out.println(s);
48     Pattern p = Pattern.compile(s);
49     ArrayList list = filePattern(file, p);
50
51     File[] rtn = new File[list.size()];
52     list.toArray(rtn);
53     return rtn;
54   }

55
56   /**
57    * @param file File 起始文件夹
58    * @param p Pattern 匹配类型
59    * @return ArrayList 其文件夹下的文件夹
60    */

61
62   private static ArrayList filePattern(File file, Pattern p) {
63     if (file == null{
64       return null;
65     }

66     else if (file.isFile()) {
67       Matcher fMatcher = p.matcher(file.getName());
68       if (fMatcher.matches()) {
69         ArrayList list = new ArrayList();
70         list.add(file);
71         return list;
72       }

73     }

74     else if (file.isDirectory()) {
75       File[] files = file.listFiles();
76       if (files != null && files.length > 0{
77         ArrayList list = new ArrayList();
78         for (int i = 0; i < files.length; i++{
79           ArrayList rlist = filePattern(files[i], p);
80           if (rlist != null{
81             list.addAll(rlist);
82           }

83         }

84         return list;
85       }

86     }

87     return null;
88   }

89
90   /**
91    * 测试
92    * @param args String[]
93    */

94   public static void main(String[] args) {
95   }

96}

97

posted on 2008-06-09 17:01  逍遥子  阅读(7669)  评论(1编辑  收藏  举报

导航