过滤器(文件)

文件中遍历的方法

遍历目录

1.public String[] list() 返回String数组,表示File目录中的所有子文件或目录

2.public File[] listFiles() 返回File数组,表示File目录中的所有子文件或目录(包含路径)

注意事项:

1.两个方法遍历的是构造方法给出的目录

2.如果构造方法给出的目录路径不存在,会抛出空指针异常

3.如果构造方法给出的不是一个目录也会抛出空指针异常

public static void method(){
    File file = new File("Month\src\LearnFile");
    /*String[] filestr = file.list();
    for(String str : filestr){
        System.out.println(str);
    }*/
    File[] files = file.listFiles();
    for(File fs : files){
        System.out.println(fs);
    }

若想只得到java类型的文件该怎么做呢?

java中提供了一个过滤器的工具:

过滤器;(对遍历行为进行删选)

在File类中有两个和L istFiles重载的方法,方法的参数传递的就是过滤器

 

1.File[] listFiles(FileFilter filter)

java. io. FileFilter接口:用于抽象路径名(File对象)的过滤器。

作用:用来过滤文件(File对象)

抽象方法:用来过滤文件的方法 boolean accept(File pathname) 测试指定抽象路径名是否应该包含在某个路径名列表中。

参数: File pathname:使用ListFiles方法遍历目录,得到的每一个文件对象

 

2.File[] listFiles(FilenameFilter filter)

*java. io. FilenameFilter接口**:实现此接口的类实例可用于过滤器文件名。

作用:用于过滤文件名称

抽象方法:用来过滤文件的方法 boolean accept(File dir, String name) 测试指定文件是否应该包含在某-文件列表中。

参数: File dir:构造方法中传递的被遍历的目录

  String name :使用ListFiles方法遍历目录,获取的每一个文件/文件夹的名称 (可以先将两个参数封装为一个File对象)

注意: 两个过滤器接口是没有实现类的,需要我们自己写实现类,重写过滤的方法accept,在方法中自己定义过滤的规则

处理过程:

1.对构造方法传递的目录进行遍历,获取目录中每一个文件/文件夹,将其封装为File对象

2.调用参数传递的过滤器方法accept

3.把遍历得到的每一个File对象,传递给accept方法的参数pathname

accept方法返回一个布尔值

true:把传递过来的File对象保存到File数组中

false:不会把File对象保存到数组中

 

 

创建一个过滤器接口的实现类并重写其中的accept方法

 

import java.io.File;
import java.io.FileFilter;

public class FileFilterImpl implements FileFilter {
    @Override
    public boolean accept(File pathname) {
        if(pathname.isDirectory()){
            return true;
        }
        //如果是目录者继续遍历目录(递归调用)
        return pathname.getName().toLowerCase().endsWith(".java");
    }
}
public static void outjavafile(File file){
 if(file.isFile()){return;}
 //如果是文件,则直接结束方法
        File[] files = file.listFiles(new FileFilterImpl());
        for(File fs : files){
            if(fs.isDirectory()){
                //如果是目录,递归调用,遍历内部文件
                outjavafile(fs);
            }else {
                System.out.println(fs);
            }
        }
    }
原文地址:https://www.cnblogs.com/susexuexi011/p/13934213.html