File类的使用,递归

File类:

什么是File类:

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

构造方法:

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

示例代码如下: 

 public static void main(String[] args) {
        //File的构造方法比较灵活,可以根据具体的需要选择使用
        File fl = new File("D:/aa/hello.txt"); // f1就代表了这个文件
        File f2=new File("d:/aa", "hello.txt");
        File file = new File("d:/aa");
        File f3 = new File(file, "hello.txt");
    }

 注意:

  1. 一个File对象代表硬盘中实际存在的一个文件或者目录。
  2. 无论该路径下是否存在文件或者目录,都不影响File对象的创建

 常用方法:

  • public string getAbsolutePath() : 返回此File的绝对路径名字符串。
  • public String getPath():将此File转换为路径名字符串。
  • public String getName():返回由此File表示的文件或目录的名称。
  • public long length():返回由此File表示的文件的长度

 接下来,我们举例说明:

 public static void main(String[] args) {
        File f1=new File("d:/aa/bb/bb.txt");//创建了 文件  映射对象
        File f2=new File("./bb.txt");//创建了 文件  映射对象

        String absolutePath1 = f1.getAbsolutePath();
        String absolutePath2 = f2.getAbsolutePath();
        System.out.println("文件的绝对路径:"+absolutePath1);//绝对磁盘路径
        System.out.println("文件的绝对路径:"+absolutePath2);//绝对磁盘路径

        String path1 = f1.getPath();
        String path2 = f2.getPath();
        System.out.println("文件定义的路径:"+path1);//定义的时候的文件路径名
        System.out.println("文件定义的路径:"+path2);

        String name1 = f1.getName();
        String name2 = f2.getName();
        System.out.println("文件名称:"+name1);
        System.out.println("文件名称:"+name2);

        String parent1 = f1.getParent();
        String parent2 = f2.getParent();
        System.out.println("父路径:"+parent1);
        System.out.println("父路径:"+parent2);

       File parentFile1 =  f1.getParentFile();
       File parentFile2 =  f2.getParentFile();
       System.out.println("父路径:"+parentFile1);
       System.out.println("父路径:"+parentFile2);

       long length = f1.length();
        System.out.println("文件的大小:"+length);
    }

 如下图所示,我们bb.txt里面的内容:

运行结果如下:

 注意:

        如果我们在txt里输入一个文字,则"文件的大小"输出的是3,一个文字的长度最小是2

绝对路径和相对路径:

绝对路径:从盘符开始的路径,这是一个完整的路径
相对路径:相对于项目目录的路径,这是一个便捷的路径,开发中经常使用 

 判断功能方法:

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

示例代码如下:

 public static void main(String[] args) {
        File f1=new File("d:/aa/bb/bb.txt");//创建了 文件  映射对象
        File f2=new File("./bb.txt");//创建了 文件  映射对象
        File f3=new File("d:/aa/bb");//创建了 文件  映射对象

        //判断该文件或文件夹是否存在
        System.out.println(f1.exists());
        System.out.println(f2.exists());
        System.out.println(f3.exists());

        System.out.println("------");

        //判断是否为文件夹
        System.out.println(f1.isDirectory());
        System.out.println(f3.isDirectory());

        System.out.println("------");

        //判断是否为文件
        System.out.println(f1.isFile());
        System.out.println(f3.isFile());
    }

 运行结果如下:

 File类的创建和删除:

public boolean createNewFile():当且仅当具有该名称的文件尚不存在时,创建一个新的空文件
public boolean delete():删除由此File表示的文件或目录。
public boolean mkdir():创建由此File表示的目录。
public boolean mkdirs():创建由此File表示的目录,包括任何必需但不存在的父目录

 示例代码如下:

 public static void main(String[] args) throws IOException {
        //File类对象创建  文件的创建
        File f1 = new File("D:/aa/bb/b.txt");
        //1.如果文件的前置目录路径不存在,则抛出异常;2.文件前置的目录路径存在,文件不存在则创建一个空文件;文件存在则不做任何操作
        f1.createNewFile();

        //File类对象创建  文件夹的创建
        File f2 = new File("D:/bb/cc/dd");
        //该方法要求所有前置目录已经存在,才会创建对应的文件夹 dd
        //f2.mkdir();
        //该方法可以自动补全所有父目录,并创建文件夹,一般使用该方法
        f2.mkdirs();

        //File类对象的删除
        File f3 = new File("D:/bb/cc/dd");
        f3.delete();
    }

注意:

1.删除此抽象路径名表示的文件或目录。如果此路径名表示一个目录,则该目录必须为空才能删除。

2.删除文件的时候,不管里面有没有内容,可以直接删除。

来让我们看一道练习题:

 在D盘中aa/bb/cc的目录中创建一个c.txt的文件,要求全部使用程序创建

File f1 = new File("D:/aa/bb/cc");
File f2 = new File(f1,"c.txt");
f1.mkdirs();
f2.createNewFile();

递归:

我们所学的实现循环的方式有哪些?

while      do-while    for

今天再来学习一个递归。

什么是递归:

  它是指一段程序直接或者间接调用自身的一种方法,通过这种形式执行需要进行一些固定步骤的许多操作,它可以把一个复杂并且庞大的问题简单化,通过专注于解决它分化出来的小问题从而解决大问题,从而大大减少我们的代码量,是提高我们编码效率的很好方法。

递归的特点:

递归有两个显著的特征,终止条件和自身调用:

终止条件:递归必须有一个终止的条件,要不然就会无限循环地调用本身。

自身调用:原问题可以分解为子问题,子问题和原问题的求解方法是一致的,即都是调用自身的同一个函数。

递归解题思路:

解决递归问题一般就三步曲,分别是:

第一步,定义函数功能
第二步,寻找递归终止条件
第二步,递推函数的等价关系式

 接下来,让我们看两个例子:

 第一个:用递归实现打印输出1-n

 public static void main(String[] args) {
            print(10);
    }
    /**
     *递归实现打印输出1-n
     * @param n
     */
    public static void print(int n) {
        if(n>1){
            print(n-1);//1——n-1
        }
        System.out.println(n);//n
    }

打印结果如下:

 

  第二个:用递归实现打印1-n的累加求和

public static void main(String[] args) {
    int he = sum(10);
    System.out.println(he);
}
    /**
     * 完成1-n的累加求和
     * @param n
     */
    public static int sum(int n) {
        int sum = 0;
        sum = sum+n;//累加了n
        if (n>0){
            sum = sum+sum(n-1);//累加1——(n-1)
        }
        return sum;
    }

运行结果如下:

 文件夹的便历:

刚才我们学习了递归思想,接下来就让我们使用递归来 完成文件夹目录的遍历

public class FileRecTest {
    public static void main(String[] args) {
        //使用递归完成文件夹目录结构的遍历
        File f1 = new File("D:/aa");
        directoryList(f1);

    }
    /**
     * 完成对传入文件的所有子目录的遍历
     * @param file
     */
    public static void directoryList(File file) {
        File[] files = file.listFiles();
        for (int i = 0; i < files.length; i++){
            File temp = files[i]; //获取每一个文件夹
            if (temp.isDirectory()){
                System.out.println(temp); //bb cc //把当前文件夹打印
                directoryList(temp);//当前文件夹的所有子目录打印
            }
        }
    }
}

运行结果:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值