Java File类(2)递归

递归 

package ThreadGoOn;

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        System.out.println("菲波那切数列第"+(n+1)+"项是"+fibo(n));
        System.out.println(n+"的阶乘是"+method1(n));
        System.out.println(n+"的累加和是"+method2(n));
    }

    public static int fibo(int n) {
        if(n==0 || n==1){
            return 1;
        }else {
            return fibo(n-1)+fibo(n-2);
        }
    }

    public static int method1(int n){
        if(n==1) {
            return 1;
        }else {
            return method1(n-1) * n;
        }
    }

    public static int method2(int n){
        if(n==1){
            return 1;
        }else{
            return method2(n-1)+n;
        }
    }
}

递归打印多级目录

package FileStudy;

import java.io.File;

public class FileMain {
    public static void main(String[] args) {
        File f = new File("C:\\Users\\hpuzjh\\Documents\\Tencent Files\\1654016769\\FileRecv");
        getAllFiles(f);
    }
    public static void getAllFiles(File dir) {
        for (File file : dir.listFiles()) {
            if(file.isDirectory()){
                getAllFiles(file);
            }else {
                System.out.println(file.getAbsoluteFile());
            }
        }
    }
}

文件搜索

使用递归搜索所有的Python文件

有三种方法可以将File类型转换成为String类型

getName、getPath、toString方法,其中getPath方法其实就是调用的toString方法。

package FileStudy;

import java.io.File;

public class FileMain {
    public static void main(String[] args) {
        File f = new File("C:\\Users\\hpuzjh\\Documents\\Tencent Files\\1654016769\\FileRecv");
        getAllFiles(f);
    }
    public static void getAllFiles(File dir) {
        for (File file : dir.listFiles()) {
            if(file.isDirectory()){
                getAllFiles(file);
            }else {
                String name = file.getName();
                if(name.endsWith(".py")){
                    System.out.println(file.getAbsoluteFile());
                }
            }
        }
    }
}

 

FileFilter过滤器

原理https://www.bilibili.com/video/av55246614?p=347

使用文件过滤器优化文件搜索

重写FileFilter接口实现类中的accept方法,可以写实现类实现,也可使用匿名内部类,接口中只有一个抽象方法也可使用lamda表达式

package FileStudy;

import java.io.File;
import java.io.FileFilter;

public class FileMain {
    public static void main(String[] args) {
        File f = new File("C:\\Users\\hpuzjh\\Documents\\Tencent Files\\1654016769\\FileRecv");
        getAllFiles(f);
    }
    public static void getAllFiles(File dir) {
        File[] files = dir.listFiles(new FileFilter() {
            @Override
            public boolean accept(File file) {
                return file.getName().toLowerCase().endsWith(".py");
            }
        });
        for (File file : files) {
            if(file.isDirectory()){
                getAllFiles(file);
            }else {
                System.out.println(file);
            }
        }
    }
}

使用lamda表达式

FilenameFilter过滤器

重写FileNameFilter接口实现类中的accept方法,自己写过滤规则。和上面的accept方法的参数列表不一样,有两个参数

 

使用文件过滤器优化(匿名内部类实现接口)

package FileStudy;

import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;

public class FileMain {
    public static void main(String[] args) {
        File f = new File("C:\\Users\\hpuzjh\\Documents\\Tencent Files\\1654016769\\FileRecv");
        getAllFiles(f);
    }
    public static void getAllFiles(File dir) {
        File[] files = dir.listFiles(new FilenameFilter() {
            @Override
            public boolean accept(File file, String s) {
                return new File(file,s).getName().toLowerCase().endsWith(".py");
            }
        });
        for (File file : files) {
            if(file.isDirectory()){
                getAllFiles(file);
            }else {
                System.out.println(file);
            }
        }
    }
}

使用lamda表达式

发布了369 篇原创文章 · 获赞 74 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/qq_41333844/article/details/103032787