File类、递归

该博客主要介绍了Java中File类和递归的相关知识。File类用于文件和目录的操作,包括构造、路径概念、获取、判断、创建删除及遍历目录等方法。递归则是在方法内部调用自己,文中还给出了目录搜索、批量修改文件名等多个递归应用案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

目录

一、File类

1.File类的作用

2.File类的构造

3.相对路径和绝对路径的概念

4.获取方法

5.判断方法

6.创建删除方法

7.遍历目录的方法(*****)

二、递归

1.什么是递归?

2.目录搜索案例

3.批量修改文件名案例

4.获取文件夹大小案例

5.猴子吃桃子问题

6.斐波那契数列


一、File类

1.File类的作用

java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。

2.File类的构造

public File(String pathname)

public File(String parent, String child)

public File(File parent, String child)

注意:

1. 一个File对象代表硬盘中实际存在的一个文件或者目录。

2. 无论该路径下是否存在文件或者目录,都不影响File对象的创建。

3.相对路径和绝对路径的概念

绝对路径:从盘符开始的路径,这是一个完整的路径。

相对路径:相对于项目目录的路径,这是一个便捷的路径,开发中经常使用。

4.获取方法

public String getAbsolutePath() :返回此File的绝对路径名字符串。

public String getPath() :返回此File的路径名字符串。(只能获取文件的大小,对于文件夹来说大小是不确定的

public String getName() :返回由此File表示的文件或目录的名称。

public long length() :返回由此File表示的文件的长度。

5.判断方法

public boolean exists() :此File表示的文件或目录是否实际存在。

public boolean isDirectory() :此File表示的是否为目录。

public boolean isFile() :此File表示的是否为文件。

在开发中必须先判断是否存在,在判断是否是文件夹或文件

6.创建删除方法

public boolean createNewFile() :当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。

public boolean delete() :删除由此File表示的文件或目录。(文件夹里面有文件时无法删除)

public boolean mkdir() :创建由此File表示的目录。

public boolean mkdirs() :创建由此File表示的目录,包括任何必需但不存在的父目录。

7.遍历目录的方法(*****)

public String[] list() :返回一个String数组,表示该File目录中的所有子文件或目录。

public File[] listFiles() :返回一个File数组,表示该File目录中的所有的子文件或目录。

二、递归

1.什么是递归?

在方法内部调用自己

2.目录搜索案例

public static void main(String[] args) {
    File file = new File("F:/黑马程序员");
    searchFile(file, "txt");
}

public static void searchFile(File file, String name) {
    //参数非空判断
    Objects.requireNonNull(file);
    Objects.requireNonNull(name);
    //方式1:匿名内部类
    /*File[] files = file.listFiles(new FileFilter() {
        @Override
        public boolean accept(File pathname) {
            return pathname.getName().endsWith("." + name)||pathname.isDirectory();
        }
    });*/
    //方式2:Lanbda表达式
    if (file.exists()) {
        File[] files = file.listFiles((pathname) -> {
            return pathname.getName().endsWith("." + name)
                    || pathname.isDirectory();
        });
        //递归调用
        for (File f : files) {
            if (f.isDirectory()) {
                searchFile(f, name);
            } else {
                //打印文件名
                System.out.println(f.getName());
            }
        }
    }
}

3.批量修改文件名案例

File file = new File("F:/黑马程序员/就业班/day08-File类、递归/文件重命名案例");
if(file.exists()){
    File[] files = file.listFiles();
    for (File file1 : files) {
        String filename = file1.getName();
        int i = filename.indexOf("_");
        int y = filename.lastIndexOf("_");
        filename = filename.substring(i + 1, i + 4) +
                filename.substring(y + 1);
        System.out.println(file1.renameTo(new File(file, filename)));
    }
}

4.获取文件夹大小案例

描述:从键盘接收一个文件夹路径,获得该文件夹大小并输出到控制台。

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入文件夹路径");
        String fileName = sc.next();
        File f = new File(fileName);
        System.out.println(getFileSize(f));
    }

    public static long getFileSize(File file) {
        long length = 0;
        Objects.requireNonNull(file);
        if (file.exists()) {
            File[] files = file.listFiles();
            for (File file1 : files) {
                if (file1.isDirectory()) {
                    length += getFileSize(file1);
                } else {
                    length += file1.length();
                }
            }
            return length;
        } else {
            return 0;
        }
    }

5.猴子吃桃子问题

描述:猴子吃桃子问题,猴子第一天摘下若干个桃子,当即吃了快一半,还不过瘾,又多吃了一个。
第二天又将仅剩下的桃子吃掉了一半,又多吃了一个。以后每天都吃了前一天剩下的一半多一个。
到第十天,只剩下一个桃子。试求第一天共摘了多少桃子?  //1534
public static void main(String[] args) {
        System.out.println(getNum(10));
    }
    public static int getNum(int n){
        if(n==1){
            return 1;
        }else{
            return (getNum(n-1)+1)*2;
        }
    }

6.斐波那契数列

描述:

用递归实现不死神兔

故事得从西元1202年说起,话说有一位意大利青年,名叫斐波那契。

在他的一部著作中提出了一个有趣的问题:假设一只刚出生的小兔一个月后就能长成大兔,

再过一个月(也就是第三个月)就能生下一只小兔,并且此后每个月都生一只小兔,没有发生死亡,

问:现有一只刚出生的兔子2年后(24个月)会有多少只兔子?

分析:

从第一个兔子开始,第1个月1只兔子,由于长到第三个月后每个月又生一只兔子,所以第2个月也是1只兔子,第3个月时可以生一只兔子,所以总数为2只,这时,其中有一只是以后每个月都可以生一只兔子的老兔子,另一只是一只新兔子,它只有在第三个月的时候才可以每个月生一只兔子;这样的话,第4个月的兔子总数为3只,…以此类推,从第1个月到第24个月的兔子总数分别为:1,1,2,3,5,8,13,21,34,55,89,144...

  public static void main(String[] args) {
        for (int i = 1; i <= 15; i++) {
            System.out.println(getNum(i));
        }
    }
    public static int getNum(int month){
        if(month==1||month==2){
            return 1;
        }else{
            return getNum(month-2)+getNum(month-1);
        }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值