文件过滤器简介
public interface FilenameFilter
实现此接口的类实例可用于过滤器文件名。Abstract Window Toolkit 的文件对话框组件使用这些实例过滤 File 类的 list 方法中的目录清单。
public interface FileFilter 用于抽象路径名的过滤器。
此接口的实例可传递给 File 类的 listFiles(FileFilter) 方法。
一般地,使用list()和listFiles()返回所有文件和目录:
String[] list() 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。
File[] listFiles() 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。
FilenameFilter 和 FileFilter用来把符合要求的文件或目录返回。
String[] list(FilenameFilter filter) 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。
File[] listFiles(FileFilter filter) 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。
File[] listFiles(FilenameFilter filter) 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。
方法详细信息
1、FilenameFilter接口:boolean accept(File dir, String name) 测试指定文件是否应该包含在某一文件列表中。
参数:dir- 被找到的文件所在的目录。name- 文件的名称。
返回:当且仅当该名称应该包含在文件列表中时返回true;否则返回false。
2、FileFilter接口:boolean accept(File pathname) 测试指定抽象路径名是否应该包含在某个路径名列表中。
参数:pathname- 要测试的抽象路径名
返回:当且仅当应该包含pathname 时返回 true
两者的区别
FilenameFilter中的accept函数接收的是两个参数:指定父目录的路径和父目录路径中所有的子文件或者子文件夹,需要将这两个参数封装成File的对象再使用File中的功能。
FileFilter中的accept函数接收的则直接是:完整的路径,即需要进行过滤操作的文件或文件夹,直接可以使用File中的功能。
过滤器一般用法
以FilenameFilter的使用为例:
1、实现FilenameFilter接口;
2、实现booleanaccept(File dir,String name);
class MyFilenameFilter implements FilenameFilter {
// type为需要过滤的条件,比如如果type=".jpg",则只能返回后缀为jpg的文件
private String type;
public MyFilenameFilter(String type) {
this.type = type;
}
@Override
// 返回true的文件则合格
public boolean accept(File dir, String name) {
return name.endsWith(type);
}
}
程序实例
package com.zxt.file;
import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;
/**
*
* @Description: 文件过滤器的使用
*
* @author: zxt
*
* @time: 2018年3月1日 下午3:13:06
*
*/
public class FileFilterTest {
public static void main(String[] args) {
File file = new File("./");
// 列出目录下的所有文件和文件夹
String[] files = file.list();
for(int i = 0; i < files.length; i++) {
// System.out.println(files[i]);
}
// 分别用FilenameFilter 和 FileFilter 实现过滤以.txt为后缀的文件
String[] files1 = file.list(new MyFilenameFilter(".txt"));
for(int i = 0; i < files1.length; i++) {
// System.out.println(files1[i]);
}
// MyFileFilter过滤器用于 listFiles 函数
File[] files2 = file.listFiles(new MyFileFilter(".txt"));
for(int i = 0; i < files2.length; i++) {
System.out.println(files2[i].getName());
}
}
}
class MyFilenameFilter implements FilenameFilter {
// type为需要过滤的条件,比如如果type=".jpg",则只能返回后缀为jpg的文件
private String type;
public MyFilenameFilter(String type) {
this.type = type;
}
@Override
// 返回true的文件则合格
public boolean accept(File dir, String name) {
// 这里如果需要使用文件的功能,则需要先进行封装
File file = new File(dir,name);
return name.endsWith(type) && file.isFile();
}
}
class MyFileFilter implements FileFilter {
private String type;
public MyFileFilter(String type) {
this.type = type;
}
@Override
public boolean accept(File pathname) {
// 这里如果需要使用文件的功能直接使用即可
return pathname.getName().endsWith(type) && pathname.isFile();
}
}