序言:上一篇我们讲解了 File类中常用的一些方法,这一章,我们继续学习怎样通过 File的list方法,来查找一些文件;
方法 | 概要 |
---|---|
String[] | list()返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录 |
String[] | list(FilenameFilter filter) 返回一个字符串数组,命名由此抽象路径名表示的目录中满足指定过滤器的文件和目录。 |
File[] | listFiles()返回一个抽象路径名数组,表示由该抽象路径名表示的目录中的文件。 |
File[] | listFiles(FilenameFilter filter)返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。 |
1、list方法的使用
该方法主要 功能是 查询指定目录下的文件和目录;这里要强调一下,该方法只能查询出一级目录中的内容;如果要查询出该目录下的所有文件信息,需要自己实现递归查询的方法。(下面会有演示案例)
查询 src 一级目录中的文件
目录结构:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nFkkE7XW-1593355076730)(img\file!在这里插入图片描述file3-1.png)]
代码:
File file = new File("src");
String[] list = file.list();
System.out.println(Arrays.toString(list));
结果:
[fileInputStream.txt, main, newfile.txt, temp511878241678629635.txt, test]
2、listFiles 方法的使用
该方法 和 list方法的效果很像,但是 一个返回的是 字符串表示的抽象路径,一个是File表示的抽象路径;
递归查询src目录下的所有文件(排除目录)
目录结构:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nsL8fG71-1593355076733)(img\file\file3-2.png)]
代码:
@Test
public void testRecursionFileList() {
findByRecursionList(new File("src"));
}
private void findByRecursionList(File dirs) {
if(validate(dirs)){
return;
}
File[] list = dirs.listFiles();
for(File dir:list){
if(dir.isDirectory()){
findByRecursionList(dir);
}else{
System.out.println(dir.getName());
}
}
}
private boolean validate(File dir) {
if (dir == null) {
return true;
}
if (dir.isFile()) {
return true;
}
return false;
}
结果:
fileInputStream.txt
AutoCloseableObject.java
newfile.txt
temp511878241678629635.txt
TestAutoCloseable.java
TestFile.java
TestInputStream.java
三 、FilenameFilter 接口
FilenameFilter 是一个函数式接口,主要功能就是帮助 list 和listFiles 方法,对获取的抽象路径按照自定义的方式进行过滤;
@FunctionalInterface
public interface FilenameFilter {
boolean accept(File dir, String name);
}
下面,我们 来过滤掉 叫fileInputStream.txt 的文件:
File file = new File("src");
String[] list = file.list((path, name) -> {
if (name.equals("fileInputStream.txt")) {
return false;
}
return true;
});
System.out.println(Arrays.toString(list));
结果:
[main, newfile.txt, temp511878241678629635.txt, test]