过滤器+递归

过滤器

File类中重载的listFiles方法,可以接受指定的过滤器。

listFiles(FileFilter filter) 也可以接受一个FileFilter过滤器FilenameFilter过滤器中的accept方法接受两个参数,一个当前文件或文件夹所在的路径,一个是当前文件或文件夹对象的名称。

过滤器就是创建一个类,重写accept方法,制定自己的过滤规则。

过滤器代码:

public class MyFilterb implements FileFilter {
    
    public boolean accept(File pathname) {
        //过滤器文件
        if(pathname.isFile()){
            /*//获取文件名
            String name=pathname.getName();
            //将文件名转为小写
            name=name.toLowerCase();
            //判断文件名是否以.txt结尾
            boolean flag=name.endsWith(".txt");
            return flag;*/
            /*上述方法使用相对麻烦一点,可以直接使用方法调用来达到自己的目的,最终获得以.txt结尾的文件*/
            return pathname.getName().toLowerCase().endsWith(".txt");
        }else{
            return false;
        }
    }
}
代码:
public
static void main(String[] args) { // 明确文件夹位置 File file=new File("E:\io1127"); //获取该文件夹中符合规则的文件
     //此处的结果是一个File数组
File[] files=file.listFiles(new MyFilterb()); //遍历 for(File f:files){ System.out.println(f); } }

文件过滤流程如下图所示:

pathname的对象是io1127中每一个文件或文件夹

io1127中所有的文件或文件夹当调用listFiles()方法时,会传输一个过滤器对象,过滤器会找到file对象(io1127)下的第一条文件或文件夹传给new MyFilter,然后会找到accept方法传给pathname,此时return true,说明a文件符合条件,把file对象装到File[]中,此时会遍历io1127,如果继续满足条件,继续装到File[]中,File数组就会装满,遍历会得到五条数据

accept方法会对指定路径的文件或文件夹一一进行过滤,只要对File pathname的File对象一一进行筛选,那么返回的值符合条件,那么就过滤。

二.递归

就是在当前方法内自己调用自己的现象。

递归分为两种,直接递归和间接递归。

直接递归称为方法自身调用自己。间接递归可以A方法调用B方法,B方法调用C方法,C方法调用A方法。

代码演示:

//栈内存溢出
public
static void main(String[] args) { a(); } public static void a(){ System.out.println("aa"); a(); }
}

递归的使用是一定要有条件限制的,不能无限制的递归下去,一定要保证它能停下来,否则就会发生栈内存溢出,同时次数也不能太多,要不然也会发生栈内存溢出。

递归例子:

public static void main(String[] args) {
        System.out.println(get(10));
    }//计算1-100和
  //规律:100+(100-1)+(99-1)+(98-1)+(97-1)...1
public static int get(int n){ if(n==1){ return 1; } return n+get(n-1); } //斐波那契数列 1 1 2 3 5 8 13 依次增加 public static int create(int n){ if(n==1){ return 1; } if(n==2){ return 1; } return create(n-1)+create(n-2); }

图解示例:

递归要找到规律才可以方便使用,找不到相应的规律,是无法进行写代码的

原文地址:https://www.cnblogs.com/xinzong/p/14444976.html