使用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等文件都行~