在 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 );
		}
	}
}
Java如何根据文件名查找文件
日期:2020-09-17 00:09:18 来源:oir作者:oir