Java(File类之listFiles)


一.listFiles

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

第一种

File[] listFiles(FileFilter filter)
    java.io.FileFilter接口:用于抽象路径名(File对象)的过滤器,
        作用:用来过滤文件的方法
        抽象方法:
            boolean accept(File pathname)测试指定抽象路径名是否包含再某个路径名列表中
            参数:
                File pathname:使用ListFiles方法遍历目录,得到的每一个文件对象

第二种

File[] listFiles(FilenameFilter filter)实现此接口的类实例可用于过滤文件名
java.io.FilenameFilter接口:文件名过滤器
  作用:用于过滤文件名称
  抽象方法:
  boolean accept(File dir,String name)测试指定文件是否包含在某一文件列表中
      参数:
          File dir:构造方法中传递的被遍历的目录
          String name:遍历目录获取的每一个文件/文件夹的名称

注意事项

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

二.案例

2.1 普通版

    public static void main(String[] args) {
        File file = new File("G:\\");
        getAllFile(file);

    }
    /**
     * 定义一个方法,对目录进行遍历
     * @param dir File类型的目录
     */
    public static void getAllFile(File dir){
        File[] files = dir.listFiles(new FileFilterImpl());//传递过滤器对象
        for (File f : files) {
            if (f.isDirectory()){//是文件夹继续遍历
                getAllFile(f);
            }else {//不是文件夹则输出
                System.out.println(f);
            }
        }
    }

/**
 * 创建过滤器FileFilter的实现类,重写accept
 */
public class FileFilterImpl implements FileFilter {
    @Override
    public boolean accept(File pathname) {
        //如果是文件夹,继续遍历
        if (pathname.isDirectory()){
            return true;
        }
        return pathname.getName().toLowerCase().endsWith(".java");
    }
}

2.2 升级版

 public static void main(String[] args) {
        File file = new File("G:\\");
        getAllFile(file);

    }

    /**
     * 定义一个方法,对目录进行遍历
     *
     * @param dir File类型的目录
     */
    public static void getAllFile(File dir) {
//        File[] files = dir.listFiles(new FileFilterImpl() {
//            @Override
//            public boolean accept(File pathname) {
//            //如果是文件夹,继续遍历
//            if (pathname.isDirectory()){
//             return true;
//              }
//             return pathname.getName().toLowerCase().endsWith(".java");
//              }
//           }
//        );//传递过滤器对象
//
        dir.listFiles(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                return new File(dir,name).isDirectory()||name.toLowerCase().endsWith(".java");
            }
        });
        for (File f : files) {
            if (f.isDirectory()) {//是文件夹继续遍历
                getAllFile(f);
            } else {//不是文件夹则输出
                System.out.println(f);
            }
        }
    }

2.3 lambda表达式(接口中只有一个抽象方法)

三.原理


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM