Java FilenameFilter过滤文件

情景

这里有一个文件夹‘searchFile1’,文件夹下面有如下文件:

这里写图片描述

现在我们要使用FilenameFilter过滤器将.txt文件名全部输出。

代码

下面这段代码是比较容易写出来的,也是网上搜索后主流写法,运行下:

/**
 * FilenameFilter筛选
 * @param filePath
 */
public void findTxt(String filePath){

    File file = new File(filePath);

    File[] files = file.listFiles(new FilenameFilter() {

        @Override
        public boolean accept(File dir, String name) {

            return name.endsWith(".txt");
        }
    });

    for (File file2 : files) {
        System.out.println(file2.getName());
    }
}

输出:

a.txt
b.txt
c.txt
d.txt
file.txt

问题来了,file.txt 是谁!很明显他不是.txt文件。你可能会想,谁会那么傻,在文件夹命名时加上.txt , 万事皆有可能!主要还是严谨 。

修正参考

这里需要简单处理下:加上isFile()这个判断。

/**
 * FilenameFilter筛选
 * @param filePath
 */
public void findTxt(String filePath){

    File file = new File(filePath);

    File[] files = file.listFiles(new FilenameFilter() {

        @Override
        public boolean accept(File dir, String name) {

            String dirAbsolutePath = dir.getAbsolutePath();

            String targetFilePath = dirAbsolutePath+"\\"+name;

            File newFile = new File(targetFilePath);

            return (name.endsWith(".txt") && newFile.isFile());
        }
    });

    for (File file2 : files) {
        System.out.println(file2.getName());
    }
}

运行下:

a.txt
b.txt
c.txt
d.txt
这下放心了!

总结

实际中使用FileFilter可以减少路径处理和File实例化过程,但针对当前需求,也是要加上isFile()的判断。FileFilter就不赘述!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值