Java FileNameFilter示例

时间:2020-02-23 14:36:34  来源:igfitidea点击:

当使用FilelistFiles()方法时,可以实现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);
});