18【File类、递归】

本文介绍了Java中的File类,包括其用于创建、查找和删除文件的基本概念、构造方法和常用方法,如获取绝对路径、判断文件存在、创建与删除文件等。此外,还探讨了递归的概念,展示了递归累加求和和递归计算阶乘的示例代码。
摘要由CSDN通过智能技术生成

一、File类

1、概念

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

2、构造方法

public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的 File实例。
public File(File parent, String child) :从父抽象路径名和子路径名字符串创建新的 File实例。

/*
public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的 File实例。
public File(File parent, String child) :从父抽象路径名和子路径名字符串创建新的 File实例。
 */
public class Demo01File {
    public static void main(String[] args) {
        // 文件路径名
        String pathname = "D:\\YOLO\\JavaSE\\a.txt";
        File file1 = new File(pathname);
        System.out.println(file1);
        // 通过父路径和子路径字符串
        String parent = "D:\\YOLO\\JavaSE";
        String child1 = "b.txt";
        File file2 = new File(parent, child1);
        System.out.println(file2);
        // 通过父级File对象和子路径字符串
        File parentDir = new File("D:\\YOLO\\JavaSE");
        String child2 = "c.txt";
        File file3 = new File(parentDir, child2);
        System.out.println(file3);
    }
}

3、常用方法

获取功能的方法

/*
public String getAbsolutePath() :返回此File的绝对路径名字符串。
public String getPath() :将此File转换为路径名字符串。
public String getName() :返回由此File表示的文件或目录的名称。
public long length() :返回由此File表示的文件的长度。
 */
public class Demo02File {
    public static void main(String[] args) {
        File file = new File("D:\\YOLO\\JavaSE\\a.txt");
        File fileAbsoluteFile = file.getAbsoluteFile();
        System.out.println("绝对路径:" + fileAbsoluteFile); //绝对路径:D:\YOLO\JavaSE\a.txt
        String filePath = file.getPath();
        System.out.println("文件构造路径:" + filePath); //文件构造路径:D:\YOLO\JavaSE\a.txt
        String fileName = file.getName();
        System.out.println("文件名称:" + fileName); //文件名称:a.txt
        long length = file.length();
        System.out.println("文件长度:" + length); //文件长度:10
    }
}

判断功能的方法

/*
public boolean exists() :此File表示的文件或目录是否实际存在。
public boolean isDirectory() :此File表示的是否为目录。
public boolean isFile() :此File表示的是否为文件。
 */
public class Demo03File {
    public static void main(String[] args) {
        File file1 = new File("D:\\YOLO\\JavaSE\\a.txt");
        boolean exists1 = file1.exists();
        System.out.println(exists1); //true 存在
        File file2 = new File("D:\\YOLO\\JavaSE\\b.txt");
        boolean exists2 = file2.exists();
        System.out.println(exists2); //false 不存在
        System.out.println("========");
        boolean file1Directory = file1.isDirectory();
        System.out.println(file1Directory); //false file1表示的不是目录
        boolean file1File = file1.isFile();
        System.out.println(file1File); //true file1表示的是文件
        File file3 = new File("D:\\YOLO\\JavaSE");
        boolean file3Directory = file3.isDirectory();
        System.out.println(file3Directory); //true file3表示的是目录
        boolean file3File = file3.isFile();
        System.out.println(file3File); //false file3表示的不是文件
    }
}

创建删除功能的方法

/*
public boolean createNewFile() :当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。
public boolean delete() :删除由此File表示的文件或目录。
public boolean mkdir() :创建由此File表示的目录。
public boolean mkdirs() :创建由此File表示的目录,包括任何必需但不存在的父目录。
 */
public class Demo04File {
    public static void main(String[] args) {
        //文件的创建
        File f = new File("D:\\YOLO\\JavaSE\\b.txt");
        try {
            System.out.println("是否存在:" + f.exists()); //false
            System.out.println("是否创建:" + f.createNewFile()); //true
            System.out.println("是否存在:" + f.exists()); //true
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("========");
        //目录的创建
        File f2 = new File("D:\\YOLO\\JavaSE\\newDir");
        System.out.println("是否存在:" + f2.exists()); //false
        System.out.println("是否创建:" + f2.mkdir()); //true
        System.out.println("是否存在:" + f2.exists()); //true
        System.out.println("========");
        //创建多级目录
        File f3 = new File("D:\\YOLO\\JavaSE\\newDirA\\newDirB");
        System.out.println(f3.mkdir()); //false
        File f4 = new File("D:\\YOLO\\JavaSE\\newDirA\\\newDirB");
        System.out.println(f4.mkdirs()); //false
        System.out.println("========");
        //文件的删除
        System.out.println(f.delete()); //true
        System.out.println("========");
        //目录的删除
        System.out.println(f2.delete()); //true
        System.out.println(f4.delete()); //false
    }
}

目录的遍历

/*
public String[] list() :返回一个String数组,表示该File目录中的所有子文件或目录。
public File[] listFiles() :返回一个File数组,表示该File目录中的所有的子文件或目录。
 */
public class Demo05File {
    public static void main(String[] args) {
        File file = new File("D:\\YOLO\\JavaSE");
        //获取当前目录下的文件以及文件夹的名称
        String[] list = file.list();
        if (list != null) {
            for (String s : list) {
                System.out.println(s);
            }
        }
        System.out.println("========");
        //获取当前目录下的文件以及文件夹对象 只要拿到了文件对象那么就可以获取更多信息
        File[] listFiles = file.listFiles();
        if (listFiles != null) {
            for (File listFile : listFiles) {
                System.out.println(listFile);
            }
        }
    }
}

二、递归

1、概述

递归:指在当前方法内调用自己的这种现象。
递归的分类:
递归分为两种,直接递归和间接递归。
直接递归称为方法自身调用自己。
间接递归可以A方法调用B方法,B方法调用C方法,C方法调用A方法。
注意事项:
递归一定要有条件限定,保证递归能够停止下来,否则会发生栈内存溢出;
在递归中虽然有限定条件,但是递归次数不能太多。否则也会发生栈内存溢出;
构造方法,禁止递归。

2、递归累加求和

    public static void main(String[] args) {
        int a = 4;
        int num = getSum(a);
        System.out.println("1到" + a + "的整数和为:" + num);
    }

    private static int getSum(int i) {
        if (i == 1) {
            return 1;
        } else {
            return i + getSum(i - 1);
            //递归一定要有条件限定保证递归能够停止下来 次数不要太多 否则会发生栈内存溢出
        }
    }
}

3、递归求阶乘

    public static void main(String[] args) {
        int a = 4;
        int value = getValue(a);
        System.out.println("1到" + a + "的阶乘为:" + value);
    }

    private static int getValue(int i) {
        if (i == 1) {
            return 1;
        } else {
            return i * getValue(i - 1);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值