- 四种方法:
1. String[] list() ;
说明:返回某个目录下所有文件和目录的文件名,返回类型String[]
2. String[] list(FilenameFilter filter);
3. File[] listFiles();
说明:返回某个目录下所有文件和目录的绝对路径,返回类型File[]
4. File[] ListFiles(FileFilter filter)
- 文件过滤器:
5. FileFilter和FilenameFilter:
(1)FilenameFilter接口对应的内部方法:boolean accept(File dir,String name);
dir:当前文件目录;name:当前文件名
String[] list(FilenameFilter filter)遍历指定目录下面,指定的后缀的文件。
底层实现:
先把目录下面的文件调用list()方法全部存放到一个String[]数组里面,然后遍历数组
把符合filter.accept(this, names[i])条件的放到一个ArrayList里面
最后把ArrayList转化为String[]数组
源码:
public String[] list(FilenameFilter filter) {String names[] = list();//把所有目录文件列出来
if ((names == null) || (filter == 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()]));
}
如何使用:通常用匿名内部类或者是Lambda表达式,示例如下
File file = new File(".");
String[] nameList = file.list(((dir, name) -> name.endsWith(".java") || new File(name).isDirectory()));
for (String name : nameList) {
System.out.println(name);
}
String[] nameList2=file.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".java") || new File(name).isDirectory();
}
});
(2)FileFilter接口对应的内部方法:boolean accept(File pathname)
File[] fileList=file.listFiles((pathname)->{
if (pathname.isDirectory()){
return true;
}
String fileName=pathname.getName();
return fileName.endsWith(".java");
});