第一步:需要有一个万能过滤器:MyFileFilter.java
package com.ten.practice.test15;
import java.io.File;
import java.io.FilenameFilter;
public class MyFileFilter implements FilenameFilter {
//万能过滤器
private String suffix;
public MyFileFilter(String suffix) {
this.suffix = suffix;
}
@Override
public boolean accept(File dir, String name) {
File f = new File(dir, name);
if(f.isFile()){
return f.getName().endsWith(suffix);//符合要求的文件返回
}
return true;//是文件也返回
}
}
第二步:需要一个MyDFS.java来深度优先搜索某一文件夹
package com.ten.practice.test15;
import java.io.File;
import java.util.ArrayList;
public class MyDFS {
private static MyFileFilter myFileter = null;
public static ArrayList<String> myDFS(File path, String suffix){
//list用于返回符合条件的文件
ArrayList<String> list = new ArrayList<String>();
//调用配置好的过滤器
myFileter = new MyFileFilter(suffix);
depth(path, suffix, list);
return list;
}
private static void depth(File argPath, String argSuffix, ArrayList<String> argList) {
File[] files = argPath.listFiles(myFileter);
for(File f : files){
if(f.isDirectory()){//是文件夹,直接作为需要检索的文件夹进行检索
depth(f, argSuffix, argList);
}else{
argList.add(f.getAbsolutePath());//是文件则入list集合
}
}
}
}
第三步:需要一个MyBFS.java来广度优先搜索某一文件夹
package com.ten.practice.test15;
import java.io.File;
import java.util.ArrayDeque;
import java.util.ArrayList;
public class MyBFS {
private static MyFileFilter myFilter= null;
public static ArrayList<String> myBFS(File argPath, String argSuffix){
//myList用来保存过滤出来的文件
ArrayList<String> myList = new ArrayList<String>();
//queue保存路径
ArrayDeque<File> queue = new ArrayDeque<File>();
//初始化过滤器
myFilter = new MyFileFilter(argSuffix);
//把要检索的文件夹路径放入队列中
queue.offer(argPath);
while(!queue.isEmpty()){//判断队列不为空
argPath= queue.poll();//把队首作为当前检索的路径
File[] files = argPath.listFiles(myFilter);//获得当前检索的路径所有的子文件和文件夹
for(File f:files){
if(f.isFile()){
myList.add(f.getAbsolutePath());//是文件入list集合
}else{
queue.offer(f);//是文件夹入queue作为新的需要检索文件夹的路径
}
}
}
return myList;
}
}
第四步:需要一个TestFileFilter.java来测试
package com.ten.practice.test15;
import java.io.File;
import java.util.ArrayList;
public class TestFileFilter {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
File path = new File("D:\\workplace\\Myeclipse\\Practice\\src\\com\\ten\\practice\\test14");
String suffix = ".txt";
list = MyDFS.myDFS(path, suffix);
for(String s:list){
System.out.println(s);
}
System.out.println("--------分割线@_@也装逼---------");
list = MyBFS.myBFS(path, suffix);
for(String s:list){
System.out.println(s);
}
}
}