File类、递归
发布日期:2022-04-22 13:47:51 浏览次数:9 分类:技术文章

本文共 4292 字,大约阅读时间需要 14 分钟。

 

目录


一、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);        }    }

 

转载地址:https://yfy1995.blog.csdn.net/article/details/82117490 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:File类使用详解
下一篇:file类

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月24日 15时45分18秒