FileFilter文件过滤器

303 阅读2分钟

关于Filename和FileFilter的应用

  • 概念

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

File[] listFiles(FileFilter filter) :(java.io.FileFilter)返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。

File[] listFiles(FilenameFilter filter):(java.io.FilenameFilter)返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。

java.io.FileFilter接口: 作用:用来过滤文件(File对象) boolean accept(File pathname) :测试指定的抽象路径名是否应包含在路径名列表中。 File pathname是指Listfiles遍历目录得到的每一个文件对象。

java.io.FilenameFilter接口: 作用:用于过滤文件名 boolean accept(File dir, String name) :测试指定文件是否应包含在文件列表中。 File dir是指构造方法中传递的被遍历的目录,String name是指使用Listfiles遍历目录得到的每一个文件和文件夹的名称 注意: 两个过滤器接口没有实现类,需要自己写,重写accept方法,在方法中自己定义过滤的规则

Filename过滤器

用于过滤File文件

实现boolean accept(File pathname) 方法 返回值是File[]

过滤得到某一些文件:比如以.txt结尾的文件

package com.cyc.test;

import java.io.File;

public class FileFilter {
    public static void main(String[] args) {
    
        //创建File对象 
        File file=new File("C:\Users\CYC\Desktop\aaa");
        
        //导入FileFilter过滤器
        File[] files = file.listFiles(new java.io.FileFilter() {
            @Override
            public boolean accept(File pathname) {
                if (pathname.isDirectory()){
                    return false;
                }
                return pathname.getName().toLowerCase().endsWith(".txt");
            }
        });
        for (File file1:files){
            System.out.println(file1);
        }
    }
}

FilenameFilter过滤器

用于过滤文件名称

实现boolean accept(File dir, String name)方法返回值是File[]

package com.cyc.test;

import java.io.File;
import java.io.FilenameFilter;

public class FilenameFilterDemo {
    public static void main(String[] args) {
        File file=new File("C:\Users\CYC\Desktop\aaa");
        File[] files = file.listFiles(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                return name.endsWith(".txt");
            }
        });
        for (File file1:files){
            System.out.println(file1);
        }
    }
}

FilenameFilter类和FileFilter类的异同 相同:两者都是用来过滤文件的;

       两者的accept方法都没有实现类,需要自己在方法定义过滤条件的实现类。

不同:两者的accept方法的参数不同。

FilenameFilter接口:

boolean accept(File dir,String name) dir:当前目录,name:文件名。

FileFilter接口:

boolean accept(File pathname) pathname:文件