首页 > 技术文章 > Filter

ljlaction 2018-08-21 08:15 原文

学习查找文件信息过滤是必不可少的,根据套路,首先需要传入文件路径,调用listfiles方法创建file数组

对数组进行遍历。

示例:

  public static void main(String[] args) {

    File file = new File("D:\\developfile\\project\\oracle\\javaSE\\resource\\test");
    File[] files = file.listFiles();
    for (File f : files) {
      System.out.println(f);
    }
  }

由类实现filefilter接口,将类的对象传入到file数组中过滤掉数据,重写调用accept方法

示例:

    class MyFilter implements FileFilter //实现接口

    File[] files = file.listFiles(new MyFilter()); //传入过滤

    public boolean accept(File pathname) {
      String name = pathname.getName().toLowerCase();
      boolean flag = name.endsWith(".java");
      return flag;
    }

如果要遍历查找到文件夹以及子文件夹下的所有指定类型的文件,这就需要递归的查找

我们可以首先写一个方法:

  public static void getAllFile(File file) {

    File[] files = file.listFiles(new YourFile());
    for (File f : files) {
      if(f.isDirectory()) {
        getAllFile(f);
      }else {
        System.out.println(f);
      }
    }
  }

创建一个类来实现filefilter接口来添加过滤条件实现过滤效果

  class YourFile implements FileFilter{

    public boolean accept(File pathname) {
      //如果是文件夹则不进行过滤,直接添加到File数组中
      if(pathname.isDirectory()) {
        return true;
      }
       return pathname.getName().toLowerCase().endsWith(".java");
     }

   }

通过main方法建立运行入口进行运行

  public static void main(String[] args) {

    File file = new File("D:\\developfile\\project\\oracle\\javaSE\\resource\\test");
    getAllFile(file);
  }

我们可以看到运行结果:

D:\developfile\project\oracle\javaSE\resource\test\c.JAVA
D:\developfile\project\oracle\javaSE\resource\test\d.jAVA
D:\developfile\project\oracle\javaSE\resource\test\java\bcd.java
D:\developfile\project\oracle\javaSE\resource\test\k.java
D:\developfile\project\oracle\javaSE\resource\test\s\sd.java

推荐阅读