可以用实现类完成过滤器过滤规则的编写
也可以直接使用匿名内部类
Java中使用过滤器时用匿名内部类判断目录中是否有.jpg文件
方法一:
package com.baidu.demoFilter;
import java.io.File;
import java.io.FileFilter;
public class DemoFilter02 {
public static void main(String[] args) {
File file = new File("F:\\develop");
getAllFile(file);
}
public static void getAllFile(File dir){
// System.out.println(dir);
//传递过滤器对象,可以使用匿名内部类对象
File[] files = dir.listFiles(new FileFilter() {
public boolean accept(File pathname) {
//过滤规则,pathname是文件夹或者是以,jps结尾的文件返回true
return pathname.isDirectory()|| pathname.getName().toLowerCase().endsWith(".jpg");
}
});
for (File f : files) {
if (f.isDirectory()){
getAllFile(f);
}else {
System.out.println(f);
}
}
}
}
方法二:
package com.baidu.demoFilter;
import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;
public class DemoFilter02 {
public static void main(String[] args) {
File file = new File("F:\\develop");
getAllFile(file);
}
public static void getAllFile(File dir){
File[] files = dir.listFiles(new FilenameFilter() {
public boolean accept(File dir, String name) {
//过滤规则,pathname是文件夹或者是以,jps结尾的文件返回true
//将File dir, String name封装为一个File类对象
return new File(dir,name).isDirectory()|| name.toLowerCase().endsWith(".jpg");
}
});
for (File f : files) {
if (f.isDirectory()){
getAllFile(f);
}else {
System.out.println(f);
}
}
}
}
无论是
FilenameFilter还是FileFilter方法,都只有一个accept方法
FilenameFilter方法源码:
public interface FilenameFilter {
boolean accept(File dir, String name);
}
使用Lambda表达式优化匿名内部类
Lambda表示式使用的前提:接口中只有一个抽象方法
package com.baidu.demoFilter;
import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;
public class DemoFilter02 {
public static void main(String[] args) {
File file = new File("F:\\develop");
getAllFile(file);
}
public static void getAllFile(File dir){
File[] files = dir.listFiles((File dr, String name)->{
return new File(dir,name).isDirectory()|| name.toLowerCase().endsWith(".jpg");
});
for (File f : files) {
if (f.isDirectory()){
getAllFile(f);
}else {
System.out.println(f);
}
}
}
}
使用Lambda表达式优化匿名内部类(升级)
package com.baidu.demoFilter;
import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;
public class DemoFilter02 {
public static void main(String[] args) {
File file = new File("F:\\develop");
getAllFile(file);
}
public static void getAllFile(File dir){
/* File[] files = dir.listFiles((File dr, String name)->{
return new File(dir,name).isDirectory()|| name.toLowerCase().endsWith(".jpg");
});*/
File[] files = dir.listFiles((dr, name)->new File(dir,name).isDirectory()|| name.toLowerCase().endsWith(".jpg"));
for (File f : files) {
if (f.isDirectory()){
getAllFile(f);
}else {
System.out.println(f);
}
}
}
}