如何获取一个目录下的所有*.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等文件都行~

猜你喜欢

转载自blog.csdn.net/qq_45067943/article/details/105604879