文件过滤器 递归及斐波那契数列
当我们要获取该文件夹下的所有文件夹和文件,并对这些文件或文件夹进行筛选,就会用到文件过滤器。
查阅File类的API,在查阅时发现File类中重载的listFiles方法,并且接受指定的过滤器。listFile()里面可以传入一个过滤器,来实现我们过滤指定文件的效果。我们要创建一个过滤器类来实现FileFilter接口,重新里面的accept方法来实现我们过滤指定文件的目的,accept方法里要传入我们要过滤的File集合。accept按照我们的要求去写,比如筛选是否是.txt结尾的文件,首先要判断是否是文件 if(执行isFile()方法)
然后再获取该文件的名字,因为windows不区分大小写,然后在全部转换为小写.执行tolowercase()方法,再判断是否以.txt结尾。
最终代码为如下所示
当我们要判断指定文件夹下所有子路径也是否满足我们的过滤器需求时就会用到递归。
递归是自己调用自己的一种体现,方法是不断进栈的,栈也有一定的内存,我们要在栈内存占满之前,释放资源。就是不能无限次数的调用自己。斐波那契数列就是递归的一种体现,初始有一对兔子,他们从第三个月开始每月生一对兔子,问1年后有多少对兔子。
第一个月和第二个月都是保持一对,第三个月开始增加一对,第12个月的对数是第10个月的对数+第11个月的对数 之后的结果如图所示
因此我们可以写出获得n个月的兔子对数的方法。
所以我们可以先把我们要判断的路径传进来来执行我们的文件过滤器,遍历的时候如果是文件则继续传入文件过滤器,如果是文件并满足我们的过滤器要求然后在进行遍历
因此我们得到如下代码
来对我们的指定路径的文件夹下的所有文件进行文件过滤。