用深度优先和广度优先遍历文件夹下符合条件的文件

来源:互联网 发布:魔兽对战平台mac版 编辑:程序博客网 时间:2024/04/29 02:03

第一步:需要有一个万能过滤器: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);        }    }}

结果

0 0
原创粉丝点击