今天遇到一个要求,找出某目录下,后缀名是xls的文件,在网上查找学习操作,但输入相关问题,答案甚少,不太全,于是输入关键字:FilenameFilter才找到一篇很对此题的答案,建议看一下,献上网址:https://blog.csdn.net/xiazdong/article/details/6928455 遗憾的是这篇文章代码部分没有注释,可能是大神觉得比较简单就没注释了,如果是初学者看起来还是有点懵,所有我觉得还可以再详细再全一点,比如还可以用文件型数组来存放文件名等。实践后分享来给大家,这段代码主要功能就是筛选后缀名为xls的文件(你可以替换成你需要的),请看代码,例子参考的是教材《基于工作任务的Java程序设计》清华大学出版社中的(不写出来怕被打。。。),请看代码,内涵详细注释
package FilelFormSchoolBooks;
import java.io.*;
//具体实现的类
public class ListFilesDemo {
public static void main(String[] args) {
File file = new File("D:"+File.separator+"2015"); //“File.separator”是分隔符
System.out.println(file.getAbsolutePath()); //输出完整路径名
NameFilter filter = new NameFilter("xls"); // 类NameFilter是扩展于FilenameFilter接口,创建筛选条件
// NameFilter filter = new NameFilter(".xls"); //加个点也行
/**
* 下一行代码是创建了一个files的文件数组,存储文件名,
* (filter)就是过滤条件(在上一行代码中已经明确是筛选后缀名为xls的文件)对file目录下的所有文件进行筛选。
* 并存入files文件数组中
* 在我推荐的博文中大神用的是字符数组存储的
*/
File[] files = file.listFiles(filter);
if(files != null) //判断文件是否存在,如果不存在而强行输出,则会报NullPointerException空指针异常的错误
for(File afile: files) { //for each 循环输出文件名,不了解的可以搜一下,在集合处使用很多
if(afile != null)
System.out.println(afile);
}
}
}
//按指定扩展名进行过滤,定义一个类实现FilenameFilter接口
class NameFilter implements FilenameFilter{
//私有域扩展名
private String extent;
//接收指定的扩展名
public NameFilter(String extent) {
this.extent = extent;
}
@Override
public boolean accept(File dir, String name) {
return name.endsWith(extent);
//如果文件符合指定的扩展名则返回true,否则返回false
}
}
目录2018中的文件
右边是运行结果截图
明显可以看出后缀为xls的文件被筛选出来了,进步使人快乐,好好学习,天天向上。