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
//字符串匹配例子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

实用的模糊(通配符)文件查找程序
1
import java.io.File;
2
import java.util.regex.Matcher;
3
import java.util.regex.Pattern;
4
import 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
*/
14
public 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
import java.io.File;2
import java.util.regex.Matcher;3
import java.util.regex.Pattern;4
import 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 attributable12
* @version 1.013
*/14
public 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


浙公网安备 33010602011771号