在 File 类中使用 FilenameFilter
使用过滤器的最佳方法是将其传递给 java.io.File
类中的以下方法之一,其中 File
表示目录位置:
- String[] list(FilenameFilter filter) :返回命名目标目录中的文件和目录的字符串数组。
- File[] listFiles(FilenameFilter filter) :返回目标目录中的文件和目录数组。
Java FilenameFilter 类
从 Java 8 开始,FileNameFilter
是一个函数式接口。
实现此接口的类用于过滤文件名。
它有一个方法:
/** * Parameters: * dir - 过滤文件所在目录 * name - 文件名 * Returns: * 文件名在列表中,则返回true */ boolean accept(File dir, String name)
使用 Lambda 表达式创建 FilenameFilter
由于 FileNameFilter
是一个函数式接口,我们可以使用 lambda 表达式减少代码。
import java.io.File; import java.io.FilenameFilter; public class FilenameFilterExample { public static void main(String[] args) { // 设置要查找的目录 String targetDirectory = "c:\temp"; File dir = new File(targetDirectory); // 过滤出log文件 String[] logFiles = dir.list((d, s) -> { return s.toLowerCase().endsWith(".log"); }); // 没有找到log文件 if (logFiles.length == 0) return; // 打印出所有log文件 for (String log : logFiles) { String tempLogFile = new StringBuffer(targetDirectory).append(File.separator).append(log).toString(); System.out.println("file : " + tempLogFile ); } } }
欢迎 on
it
road
示例:Java 程序使用 FilenameFilter 查找所有日志文件
在这个例子中,我们将使用 FilenameFilter
实例列出文件夹 c:/temp
中的所有 .log
文件。
import java.io.File; import java.io.FilenameFilter; public class FilenameFilterExample { public static void main(String[] args) { // 设置查找目录 String targetDirectory = "c:\temp"; File dir = new File(targetDirectory); // 过滤出所有log文件 String[] logFiles = dir.list(new LogFilterFilter()); if (logFiles.length == 0) return; // 打印出所有log文件 for (String log : logFiles) { String tempLogFile = new StringBuffer(targetDirectory).append(File.separator).append(log).toString(); System.out.println("file : " + tempLogFile ); } } } // 设置过滤器,检查文件扩展名是否为log class LogFilterFilter implements FilenameFilter { @Override public boolean accept(File dir, String fileName) { return (fileName.endsWith(".log")); } }
示例Java使用正则表达式创建 FilenameFilter 过滤器
Java程序根据匹配正则表达式的文件名过滤所有文件。
例如,我们要列出名称中不包含数字的所有文件。
import java.io.File; import java.io.FilenameFilter; public class FilenameFilterExample { public static void main(String[] args) { // 查找目录 String targetDirectory = "c:\temp"; File dir = new File(targetDirectory); // 过滤出log文件 String[] logFiles = dir.list((d, s) -> { // return s.matches("[a-zA-z]+\.[a-z]+"); return s.matches("[a-zA-z]+\.log"); }); // 没有找到log文件 if (logFiles.length == 0) return; // 打印出所有log文件 for (String log : logFiles) { String tempLogFile = new StringBuffer(targetDirectory).append(File.separator).append(log).toString(); System.out.println("file : " + tempLogFile ); } } }
日期:2020-09-17 00:09:18 来源:oir作者:oir