【发布时间】:2015-04-26 12:24:15
【问题描述】:
这是来自“Thinking in Java”的代码 sn-p:
import java.io.*;
import java.util.*;
import java.util.regex.*;
public class DirList {
public static void main(String[] args){
File path = new File(".");
String[] list;
if(args.length == 0){
list = path.list();
}
else{
//System.out.println(args[0]);
list = path.list(new DirFilter(args[0]));
}
Arrays.sort(list, new AlphabeticComparator());
System.out.println(list.length);
for(int i = 0; i < list.length; i++){
System.out.println(list[i]);
}
}
}
class DirFilter implements FilenameFilter {
private Pattern pattern;
public DirFilter(String regex){
pattern = Pattern.compile(regex);
//System.out.println(pattern);
}
public boolean accept(File dir, String name) {
// Strip path information, search for regex:
return pattern.matcher(new File(name).getName()).matches();
}
} ///:~
理想情况下,它应该列出当前目录中的所有 .java 文件,但事实并非如此。据我观察,如果我将 C.*.java 作为命令行参数传递,则数组“列表”根本不包含任何元素。 我在这里没有包含 AlphabeticComaparator 类;它所做的只是按字母顺序对文件进行排序。
我是文件 I/O 和正则表达式的新手;非常感谢我能得到的任何帮助。
【问题讨论】:
-
如果你想列出所有的java文件,你的模式应该是
.*java -
或 .*\\.java 强制它检测点并避免像没有扩展名的 blahblahjava 这样的误报。
-
这就像一个魅力。谢谢!