Java中FileFliter过滤器

目录

一、文件过滤器的原理和使用

1、File[] listFiles(FileFilter filter)

java.io 接口 FileFilter:

作用:

抽象方法:

抽象方法的参数说明:

2、File[] listFiles(FilenameFilter filter)

java.io 接口 FilenameFilter:

作用:

抽象方法:

抽象方法参数:

注意:

二、原理

三、代码演示

1、FileFilterImpl

2、Test

四、FilenameFilter的使用

1、备注:

2、代码演示

修改后的Test类:

运行结果(跟Test一样):


一、文件过滤器的原理和使用

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方法遍历目录,获取的每一个文件/目录的名称;

注意:

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

 

二、原理

 

三、代码演示

1、FileFilterImpl

package study.filefliter;

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

public class FileFilterImpl implements FileFilter {
    @Override
    public boolean accept(File pathname) {
        //这个地方如果返回false,就不会保存到文件数组中
        //定义规则,只返回目录和目录中的.java文件
        if (pathname.isDirectory()){
            return true;
        }
        return pathname.getName().endsWith(".java");
    }
}

2、Test

package study.filefliter;

import java.io.File;

public class Test {
    public static void main(String[] args) {
        File file = new File("C:\\Users\\Administrator\\Desktop\\a");
        getFileName(file);

    }
    private static void getFileName(File file){
        if(file.exists()){
            if(file.isDirectory()){
                System.out.println("File目录名称为"+file.getName());
                File[] files = file.listFiles(new FileFilterImpl());
                assert files != null;
                for (File file1 : files) {
                    getFileName(file1);
                }
            }else if(file.isFile()){
                System.out.println("File文件名称为"+file.getName());
            }
        }
    }
}

 

四、FilenameFilter的使用

1、备注:

在此使用匿名内部类的方式演示FilenameFilter,而实际上FileFilter也可以使用此方式;

2、代码演示

修改后的Test类:

package study.filefliter;

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

public class TestFilenameFilter {
    public static void main(String[] args) {
        File file = new File("C:\\Users\\Administrator\\Desktop\\a");
        getFileName(file);

    }
    private static void getFileName(File file){
        if(file.exists()){
            if(file.isDirectory()){
                System.out.println("File目录名称为"+file.getName());
                File[] files = file.listFiles((dir, name) -> new File(dir,name).isDirectory() || name.endsWith(".java"));
                assert files != null;
                for (File file1 : files) {
                    getFileName(file1);
                }
            }else if(file.isFile()){
                System.out.println("File文件名称为"+file.getName());
            }
        }
    }
}

运行结果(跟Test一样):

File目录名称为a
File目录名称为a
File文件名称为a.java
File文件名称为a.java
File目录名称为b
File目录名称为c
File文件名称为a.java

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值