用正则表达式匹配目录下的文件,可以更快速的查找到所需要的文件。
package file.service;
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.Arrays;
import java.util.regex.Pattern;
public class FileClassFuction {
public FileClassFuction() {
// TODO Auto-generated constructor stub
}
//定义一个内部类,实现FilenameFilter接口,这是一个文件过滤器接口
//用于传递给list方法,对dir目录下的文件过滤用的
//list方法对每个文件回调accept方法判定dir目录下的name文件是否满
//足我的用regex编译的pattern模式。如果满足返回true。将这个文件加
//入到list方法的返回string列表中。
public static FilenameFilter filter(final String regex) {
return new FilenameFilter() {
private Pattern pattern = Pattern.compile(regex);
@Override
public boolean accept(File dir,String name) {
return pattern.matcher(name).matches();
}
};
}
public static void main(String[] args) throws IOException {
// 获取工程classpath目录当做基目录,依据这个基地址获取到其他地址
String basePath = FileClassFuction.class.getResource("/").getFile();
File file = new File(basePath,"../src/file/service/").getCanonicalFile();
System.out.println(file.getCanonicalPath() + file.getName());
String[] list;
// 如果命令行参数没有,直接输出file下的文件和目录名出来
if (args.length == 0) {
list = file.list();
} else {
// 如果命令行参数给定一个正则表达式,那么用带参数的list方法会将file的文件
// 和目录用正则表达式匹配,只输出匹配的文件和目录名
// 这是我输入的正则表达式 表示该file目录下所有的java源文件 ".*\.java"
System.out.println(args[0]);
System.out.println(Pattern.compile(args[0]).toString());
list = file.list(filter(args[0]));
}
Arrays.sort(list,String.CASE_INSENSITIVE_ORDER);
for (String string : list) {
System.out.println(string);
}
}
}