/**
* 获取指定目录下的所有的java文件的绝对路径,包含子目录中的。
* 要求存放到集合中(注意,过滤器对象只能有一个。)
*/
public static void main(String[] args) {
/*
* 思路;
* 1,既然包含子目录:递归。
* 2,递归出来的所有的文件和文件夹,需要加上过滤器,过滤出指定的文件。
* 3,将满足过滤器条件的文件存储到集合中。
* 注意:过滤器不要定义递归代码中,这样容器导致过滤器创建过多,内存消耗。
*/
File srcDir = new File("E:\\JavaSE_Code");
long start = System.currentTimeMillis();
FileFilter filter = new FileFilterByDirAndSuffix(".java");
List<File> list = new ArrayList<File>();
getJavaFiles_2(srcDir, filter, list);
for (File file : list) {
System.out.println(file.getAbsolutePath());
}
long end = System.currentTimeMillis();
System.out.println("毫秒值:" + (end - start));
}
// 将过滤器定义在srcDir对象的listFiles方法中,只获取子目录和指定的文件。
public static void getJavaFiles_3(File srcDir, FileFilter filter,
List<File> list) {
File[] files = srcDir.listFiles(filter);
for (File file : files) {
if (file.isDirectory()) {
getJavaFiles_3(file, filter, list);
} else {
list.add(file);
}
}
}
/*
* 使用了FileFilter的过滤器。
*/
public static void getJavaFiles_2(File srcDir, FileFilter filter,
List<File> list) {
File[] files = srcDir.listFiles();
for (File file : files) {
if (file.isDirectory()) {
getJavaFiles_2(file, filter, list);
} else {
// 满足过滤器,将file对象添加到集合中。
if (filter.accept(file)) {
list.add(file);
}
// System.out.println(file.getAbsolutePath());
}
}
}
/*
* 使用的是FilenameFilter过滤器。
*/
public static void getJavaFiles_1(File srcDir, FilenameFilter filter,
List<File> list) {
File[] files = srcDir.listFiles();
for (File file : files) {
if (file.isDirectory()) {
getJavaFiles_1(file, filter, list);
} else {
// 满足过滤器,将file对象添加到集合中。
if (filter.accept(file.getParentFile(), file.getName())) {
list.add(file);
}
// System.out.println(file.getAbsolutePath());
}
}
}