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
list = path.list(new DirFilter(args[0]));
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);
}
public boolean accept(File dir, String name) {
// Strip path information, search for regex:
return pattern.matcher(
new File(name).getName()).matches();
}
}
这个程序编译以后,在本地目录下共有DirFilter.class, DirList.java, DirList.class
这个程序的作用是输入一个正则表达式,把符合这个表达式的文件名列出来,比如我们想要列出所有以D打头的文件名,下意识,我们肯定用如下命令:java DirList D*;但是我执行该命令后,永远只列出DirFilter.class,还有两个文件名没有被列出来,这个问题我搞了好半天,后来用dir命令,发现它只是列出了第一个以D打头的文件名,后面的都被忽略了。
发现这个以后,乱搞了半天,还是不行,后来就只有把输入参数打印出来了,发现传如的参数就是DirFilter.class,奇怪吧,它传入的竟然不是“D*”,而是“DirFilter.class”,也就是排在前面的那个以D打头的文件名。
最后,我查看了一下Java的正则表达式,发现要传入如下命令行才可以:java DirList D.*
真是奇怪的东西,再怎么搞,你也不能替换我的命令行参数啊,不知道这是微软的错误,还是java命令行的错误。