要从列表中排除扩展名为.SYS的所有文件,我们可以使用由功能接口FileFilter的实例表示的文件过滤器来实现。它包含一个accept()方法,它将File作为参数列出,如果应该列出文件,则返回true。返回false不会列出文件。
以下代码创建一个文件过滤器,将过滤扩展名为.SYS的文件。
FileFilter filter = file -> {
if (file.isFile()) {
String fileName = file.getName().toLowerCase();
if (fileName.endsWith(".sys")) {
return false;
}
}
return true;
};
过滤图片文件,分级输出(使用递归)
测试说明
样例1
输入:src/step4/root
输出:
代码如下:
public class Task {
//过滤器
static FileFilter filter = file -> {
if (file.isFile()) {
String fileName = file.getName().toLowerCase();
if (fileName.endsWith(".jpg") || fileName.endsWith(".jpeg") || fileName.endsWith(".bmp") ||
fileName.endsWith(".png") ) {
return true;
}
}
if(file.isDirectory()){
return true;
}
return false;
};
//主文件路径
public void showDirStructure(File file) {
System.out.println("+--" + file.getName());
showDirTree(file," ");
}
//文件查找
public static void showDirTree(File dir,String interval){
File[] files = dir.listFiles(filter);//调用过滤器, dir.listFiles()将dir中文件目录列出
Arrays.sort(files);//目录升序排列
interval += " ";
for (File file : files) {
//判断是否是文件夹 “.isDirectory()”
if(!file.isDirectory()){
System.out.println(interval + "--" + file.getName());
}else{
System.out.println(interval + "+--" + file.getName());
//使用递归
showDirTree(file,interval + " ");
}
}
}
}