A:文件名称过滤器的概述
* public String[] list(FilenameFilter filter)
* public File[] listFiles(FileFilter filter)
File类:
* 使用 String[] list(FilenameFilter filter)遍历指定目录下面,指定的后缀的文件。
底层怎么实现过滤的?
String[] list(FilenameFilter filter)
原理:先把目录下面的文件调用list()方法全部存放到一个String[]数组里面,然后遍历数组,
把符合filter.accept(this, names[i])条件的放到一个ArrayList里面,然后把
List转化为String[]数组
底层源码解析:
public String[] list(FilenameFilter filter) {
String names[] = list();//把所有目录文件列出来
if ((names == null) || (filter == null)) {//如果没有目录或者文件,返回null
return names;
}
ArrayList v = new ArrayList();
for (int i = 0 ; i < names.length ; i++) {//找到文件,遍历
if (filter.accept(this, names[i])) {
v.add(names[i]);/把满足条件的放到List集合中
}
}
return (String[])(v.toArray(new String[v.size()]));
}
* FilenameFilter 接口
* 接口方法:
* boolean accept(File dir,String name) 可以使用此方法列出指定目录下面的带有某些后缀的文件。
参数:
dir - 被找到的文件所在的目录。
name - 文件的名称。
返回:
当且仅当该名称应该包含在文件列表中时返回 true;否则返回 false。
package com.heim.exception;
import java.io.File;
import java.io.FilenameFilter;
public class Test3 {
public static void main(String[] args) {
File dir=new File("D:\\java视频\\java1\\day19\\day19\\day19\\video");
// 方法1:
String[] arr=dir.list();//获取文件或文件夹
for (String s : arr) {
System.out.println(s);
if(s.endsWith(".jpg")) {
System.out.println(s);
}
}
// 方法2:
File[] file1=dir.listFiles();
for (File s : file1) {
if(s.isFile()&&s.getName().endsWith(".jpg")) {
System.out.println(s);
}
}
// 方法3:
String[] arr1=dir.list(new FilenameFilter() {
@Override
public boolean accept(File dir1, String name1) {
File file=new File(dir1,name1);
return file.isFile()&&file.getName().endsWith(".jpg");
}
});
for (String string : arr1) {
System.out.println(string);
}
}
}