很多时候,我们希望通过程序在某个路径下找到符合我们要求的文件< >,并进行解析。假如我们的文件名称已有一些列动态的变量组成的,而在查找的时候也是"动态"的,怎么解决?目录列表!!
[code lang="java"] import java.io.File; import java.io.FilenameFilter; import java.util.Arrays; import java.util.regex.Pattern; /** * 目录列表器 * 列出某个目录下符合条件的的文件 * @author Administrator * */ public class DirList { public static void main(String[] args){ File files = new File("F:/project/yxt_hb20110121/IO/src"); //有人认为认为File这个名字命名的并不是很好,而是倾向于FilePath,我们可以看到,list其实返回的是 目录的列表,其实就是 //一个文件名称的数组< > String[] list = files.list(new DirFilter("^\\w+.java$")); Arrays.sort(list,String.CASE_INSENSITIVE_ORDER); for(String str : list) System.out.println(str+ "-----"); } //accept()方法必须接受一个特定文件所在目录的File对象,以及包含了那个文件名得String //list()方法会为此目录对象下的每个文件名调用accept()以判断文件是否符合筛选条件,返回boolean值 } class DirFilter implements FilenameFilter{ Pattern pattern ; public DirFilter(String regex){ pattern = Pattern.compile(regex); } public boolean accept(File dir, String name) { return pattern.matcher(name).matches(); } } [/code] 修该为匿名类 [code lang="java"] import java.io.File; import java.io.FilenameFilter; import java.util.Arrays; import java.util.regex.Pattern; /** * 目录列表器 * 列出某个目录下符合条件的的文件 * @author Administrator * */ public class DirList2 { public static void main(String[] args){ File files = new File("F:/project/yxt_hb20110121/IO/src"); final String regex = "^\\w+.java$"; String[] list = files.list(new FilenameFilter(){ public boolean accept(File dir, String name) { return Pattern.compile(regex).matcher(name).matches(); } }); Arrays.sort(list,String.CASE_INSENSITIVE_ORDER); for(String str : list) System.out.println(str+ "-----"); } } [/code] 从代码上看,我们可以看到,第二个方法会比第一个方法简洁了很多,但是另一方面来说给阅读带来了一定的难度,但是学习的只是一种思想不是吗?
评论