如何获取一个目录下的所有*.txt文件名或者其他类型的文件?这里有简单的方法!!

使用FileFilter或FilenameFilter接口操作某一个目录,得到该目录下的所有*.txt文件名,用jdk8或8以上的lambda方法更简便!!!

/**
*java.io.FilenameFilter提供了让用户按文件名的方式进行文件筛选。
* java.io.FilenameFilter接口实现有三种方式:
* 1.使用单独的类实现FilenameFilter接口
* 2.使用匿名内部类,
* new FilenameFilter {
* public boolean accept(File dir, String name)
* code…
* }
* 3.jdk8 lambda expression
*/

这里主要介绍方法2.使用匿名内部类,和方法3.jdk8 lambda expression,如下所示:

package ex.ex_文件_字符流.ex_3;

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

/**
 * @author yyh on 2020/4/18 19:47
 */
public class FileTest3 {
    public static void main(String[] args) {
        File dir = new File("d:\\demo");
        File[] files = dir.listFiles( );
        System.out.println("d盘demo目录下的文件夹或文件为:" );
        for (File file : files) {
            System.out.println(" |--" + file );
        }

        //1.
        String[] s1 = dir.list(new FilenameFilter( ) {
            @Override
            public boolean accept(File dir, String name) {
                return name.endsWith(".txt");
            }
        });
        System.out.println("用FilenameFilter(返回的是String[] s)方法筛选出来的.txt文件为:" );
        for (String s : s1) {
            System.out.println(" |--" + s);
        }

        //2.
        File[] files2 = dir.listFiles(new FilenameFilter( ) {
            @Override
            public boolean accept(File dir, String name) {
                return name.endsWith(".txt");
            }
        });
        System.out.println("用FilenameFilter(返回的是File[] file)方法筛选出来的.txt文件为:" );
        for (File file : files2) {
            System.out.println(" |--" + file );
        }

        //3.
        File[] files3 = dir.listFiles(new FileFilter( ) {
            @Override
            public boolean accept(File pathname) {
                return pathname.getName( ).endsWith(".txt");
            }
        });
        System.out.println("用FileFilter(返回的是File[] file)方法筛选出来的.txt文件为:" );
        for (File file : files3) {
            System.out.println(" |--" + file );
        }

        System.out.println("-------------用lambda方法--------------" );

        //1.
        String[] s2 = dir.list((File dir1, String name) -> name.endsWith(".txt"));
        System.out.println("用lambda方法、返回String[]的(new FilenameFilter()中的File dir, String name参数)筛选出来的.txt文件为:" );
        for (String s : s2) {
            System.out.println(" |--" + s);
        }

        //2.
        File[] files4 = dir.listFiles((File dir1, String name) -> name.endsWith(".txt"));
        System.out.println("用lambda方法、返回File[]的(new FilenameFilter()中的File dir, String name参数)筛选出来的.txt文件为:" );
        for (File file : files4) {
            System.out.println(" |--" + file );
        }

        //3.
        File[] files5 = dir.listFiles((pathname -> pathname.getName( ).endsWith(".txt")));
        System.out.println("用lambda方法、(new FileFilter()中的pathname参数)筛选出来的.txt文件为:" );
        for (File file : files5) {
            System.out.println(" |--" + file );
        }
    }
}

原本d盘demo文件夹下的内容为:
在这里插入图片描述

输出结果为:

d盘demo目录下的文件夹或文件为:
 |--d:\demo\a
 |--d:\demo\a.txt
 |--d:\demo\abc
 |--d:\demo\b.txt
 |--d:\demo\File.java
 |--d:\demo\Letter
 |--d:\demo\merge.txt
 |--d:\demo\八三夭 - 想见你想见你想见你_out.mp3
 |--d:\demo\现_out.jpg
用FilenameFilter(返回的是String[] s)方法筛选出来的.txt文件为:
 |--a.txt
 |--b.txt
 |--merge.txt
用FilenameFilter(返回的是File[] file)方法筛选出来的.txt文件为:
 |--d:\demo\a.txt
 |--d:\demo\b.txt
 |--d:\demo\merge.txt
用FileFilter(返回的是File[] file)方法筛选出来的.txt文件为:
 |--d:\demo\a.txt
 |--d:\demo\b.txt
 |--d:\demo\merge.txt
-------------用lambda方法--------------
用lambda方法、返回String[](new FilenameFilter()中的File dir, String name参数)筛选出来的.txt文件为:
 |--a.txt
 |--b.txt
 |--merge.txt
用lambda方法、返回File[](new FilenameFilter()中的File dir, String name参数)筛选出来的.txt文件为:
 |--d:\demo\a.txt
 |--d:\demo\b.txt
 |--d:\demo\merge.txt
用lambda方法、(new FileFilter()中的pathname参数)筛选出来的.txt文件为:
 |--d:\demo\a.txt
 |--d:\demo\b.txt
 |--d:\demo\merge.txt

Process finished with exit code 0

可见获取目录下指定文件类型的方法如此之多,想用哪个就用哪个吧,不过lambda表达式的这种最简洁,嘻嘻

除了可以筛选出.txt文件,还可以筛选.jpg、文件名包含某个字符串、.mp3等文件都行~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值