Java FileNameFilter示例
时间:2020-02-23 14:36:34 来源:igfitidea点击:
当使用File
类listFiles()
方法时,可以实现Java FilenameFilter接口来过滤文件名。
Java FilenameFilter
Java FileNameFilter接口具有应实现的方法"布尔值接受(文件目录,字符串名)",并且将测试每个文件以将该方法包含在文件列表中。
从Java 8开始,FileNameFilter是一个功能接口,因为它具有单个方法。
Java FilenameFilter示例
我们可以在Java中使用FilenameFilter在目录中查找特定扩展名的所有文件。
下面是显示如何在Java中使用FileNameFilter的程序。
package com.theitroad.files; import java.io.File; import java.io.FilenameFilter; public class FileNameFilterExample { public static void main(String[] args) { String dir = "/Users/hyman/temp"; String extension = ".doc"; findFiles(dir, extension); } private static void findFiles(String dir, String extension) { File file = new File(dir); if (!file.exists()) System.out.println(dir + " Directory doesn't exists"); File[] listFiles = file.listFiles(new MyFileNameFilter(extension)); //File[] listFiles = file.listFiles((d, s) -> { //return s.toLowerCase().endsWith(extension); //}); if (listFiles.length == 0) { System.out.println(dir + "doesn't have any file with extension " + extension); } else { for (File f: listFiles) System.out.println("File: " + dir + File.separator + f.getName()); } } //FileNameFilter implementation public static class MyFileNameFilter implements FilenameFilter { private String extension; public MyFileNameFilter(String extension) { this.extension = extension.toLowerCase(); } @Override public boolean accept(File dir, String name) { return name.toLowerCase().endsWith(extension); } } }
MyFileNameFilter类实现FileNameFilter接口,accept方法检查文件名是否以特定扩展名结尾。
在main方法中,我们正在调用使用MyFileNameFilter仅列出xml文件的findFiles
方法。
请注意,以检查文件扩展名时忽略大小写的方式编写了MyFileNameFilter。
具有Lambda表达式的Java中的FileNameFilter
由于FileNameFilter是一个功能接口,因此我们可以使用lambda表达式来减少上述代码。
我们完全不需要编写实现。
以下是将FileNameFilter与lambda表达式结合使用的代码。
File[] listFiles = file.listFiles((d, s) -> { return s.toLowerCase().endsWith(extension); });