- 四種方法:
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");
});