File类学习--Arsu

File

1.File类的概述

在这里插入图片描述

2.1 File类的静态成员变量

在这里插入图片描述

2.2 绝对路径与相对路径

在这里插入图片描述

2.3 File类的构造方法

构造方法(一)
在这里插入图片描述
构造方法(二)
在这里插入图片描述
构造方法(三)
在这里插入图片描述

2.4 File类获取功能的方法

在这里插入图片描述
(一)getAbsolutePath方法
在这里插入图片描述
(二)getPath方法
在这里插入图片描述
(三)getName方法
在这里插入图片描述
(四)length方法
在这里插入图片描述

2.5 File类判断功能的方法

在这里插入图片描述
(一)exists方法
在这里插入图片描述

(二)isDirectory与isFile方法
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2.6 File类创建删除功能的方法

在这里插入图片描述
(一)createNewFile方法
在这里插入图片描述
在这里插入图片描述
(二)mkdir与mkdirs方法
在这里插入图片描述
在这里插入图片描述
ps(上图中File对象f4执行mkdirs方法时,不管你所写路径文件夹存不存在都会创建,返回值是true)
(三)delete方法
在这里插入图片描述

2.7 File类遍历目录(文件夹)的功能

在这里插入图片描述
(一)list方法
在这里插入图片描述
ps(该遍历能够将隐藏的文件或者文件夹也遍历出来)
(二)listFiles方法
在这里插入图片描述

3.1递归概念、分类及注意事项

在这里插入图片描述

3.2递归引发栈内存溢出原理图

在这里插入图片描述

3.3.1使用递归计算1-n之间的和代码实现(练习)

题目
在这里插入图片描述
代码

package learn.file.recurison;

/**
 * @ClassName RecurisonDemo
 * @Description TODO
 * @Author Administrator
 * @Date 2020/11/8 16:39
 * @Version 1.0
 **/
public class RecurisonDemo {
    public static void main(String[] args) {
        int sum = sum(100);
        System.out.println(sum);
    }

    //定义一个方法,使用递归计算1-n之间的和
    public static int sum(int n) {
        //当n=1时,结束递归
        if (n == 1) {
            return 1;
        }
        return n + sum(n - 1);
    }
}

打印结果截图
在这里插入图片描述
原理图分析
在这里插入图片描述

3.3.2使用递归计算阶乘(练习)

题目
在这里插入图片描述
代码

package learn.file.recurison;

/**
 * @ClassName RecurisonDemo2
 * @Description TODO
 * @Author Administrator
 * @Date 2020/11/8 16:49
 * @Version 1.0
 **/
public class RecurisonDemo2 {
    public static void main(String[] args) {
        //eg:假设计算的是5的阶乘
        int result = jc(5);
        System.out.println(result);
    }

    /**
     * 定义一个方法使用递归计算阶乘,递归结束的条件是当获取到1时,递归的目的是获得下一次被乘的数
     *
     * @param n int类型的参数
     * @return 返回使用递归计算阶乘的结果
     */
    public static int jc(int n) {
        if (n == 1)
            return 1;
        return n * jc(n - 1);
    }
}

打印结果截图
在这里插入图片描述

3.3.3使用递归打印多级目录(练习)

题目
在这里插入图片描述
前提:事先在D:\java_data\IdeaProjects(商业版)\DataStructures\目录下创建有一个abc文件夹,abc文件夹下有a文件夹(该文件夹下又包含a.jpg文件,a.txt文件),b文件夹(该文件夹下又包含b.java文件,b.txt文件),abc.java文件,abc.txt文件
代码

package learn.file.recurison;

import java.io.File;

/**
 * @ClassName RecurisonDemo3
 * @Description TODO
 * @Author Administrator
 * @Date 2020/11/8 17:08
 * @Version 1.0
 **/
public class RecurisonDemo3 {
    public static void main(String[] args) {
        String filePath = "D:\\java_data\\IdeaProjects(商业版)\\DataStructures\\abc";
        recurisonFiles(filePath);
    }

    /*
     * 定义一个方法传递一个路径目录字符串来对目录进行遍历
     */
    public static void recurisonFiles(String filePath) {
        System.out.println(filePath);
        File file = new File(filePath);
        File[] files = file.listFiles();
        for (File f : files) {
            //对遍历得到的file1对象进行判断,判断是否为文件夹,是的话继续递归遍历
            if (f.isDirectory()) {
                recurisonFiles(f.getAbsolutePath());
            } else {
                System.out.println(f);
            }
        }
    }
}

打印结果截图
在这里插入图片描述

3.3.4综合案例----文件搜索(练习)

题目:在3.3.3的基础上就行筛选,只要.java结尾的文件,同时将b文件夹下面的b.java改为b.JAVA,其他条件都没有改变。
代码

package learn.file.recurison;

import java.io.File;

/**
 * @ClassName RecurisonDemo4
 * @Description TODO
 * @Author Administrator
 * @Date 2020/11/8 17:39
 * @Version 1.0
 **/
public class RecurisonDemo4 {
    public static void main(String[] args) {
        String filePath = "D:\\java_data\\IdeaProjects(商业版)\\DataStructures\\abc";
        recurisonFiles(filePath);
    }

    /*
     * 定义一个方法传递一个路径目录字符串,对目录中的文件后缀名进行判断
     * 只要.java结尾的文件
     */
    public static void recurisonFiles(String filePath) {
        File file = new File(filePath);
        File[] files = file.listFiles();
        for (File f : files) {
            //对遍历得到的file1对象进行判断,判断是否为文件夹,是的话继续递归遍历
            if (f.isDirectory()) {
                recurisonFiles(f.getPath());
            } else {
                /*
                分析:本题要求打印得到以.java为后缀的文件,String类中有一个endsWith方法可以获得
                对象的后缀名,所以这里可以考虑把遍历得到的file文件对象转化为String对象
                 */
                //1.将file文件对象转化为String对象
                String s = f.getPath();
                //考虑到可能会出现大写字母后缀的情况,这里提前把s转化为小写
                s = s.toLowerCase();
                //2.调用String类的endsWith方法判断字符串是否以.java结尾
                boolean b = s.endsWith(".java");
                //3.若以.java结尾则输出
                if (b) {
                    System.out.println(f);
                }
            }
        }
    }
}

打印结果截图
在这里插入图片描述

4. 1FileFilter过滤器的原理

在这里插入图片描述

4. 2FileFilter过滤器的使用(练习)

通过学习FileFilter过滤器对3.3.3使用递归打印多级目录练习进行优化
在这里插入图片描述
在这里插入图片描述

定义FileFilter接口的实现类

package learn.file.recurison.fileFilter;

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

/**
 * @ClassName FileFilterImpl
 * @Description TODO
 * @Author Administrator
 * @Date 2020/11/8 18:18
 * @Version 1.0
 **/
public class FileFilterImpl implements FileFilter {
    @Override
    public boolean accept(File pathname) {
        /**
         * 定义过滤规则
         * 在accept方法中判断传入的文件的后缀名是否以.java结尾,是则返回true,否则返回false
         */
        //如果pathname是个文件夹,则返回true继续进行遍历
        if (pathname.isDirectory()) {
            return true;
        }
        return pathname.getName().toLowerCase().endsWith(".java");

    }
}

测试

package learn.file.recurison;

import learn.file.recurison.fileFilter.FileFilterImpl;

import java.io.File;

/**
 * @ClassName RecurisonDemo5
 * @Description TODO
 * @Author Administrator
 * @Date 2020/11/8 18:15
 * @Version 1.0
 **/
public class FileFilterDemo {
    public static void main(String[] args) {
        String filePath = "D:\\java_data\\IdeaProjects(商业版)\\DataStructures\\abc";
        recurisonFiles(filePath);
    }

    /*
     * 定义一个方法传递一个路径目录字符串来对目录进行遍历
     */
    public static void recurisonFiles(String filePath) {
        File file = new File(filePath);
        File[] files = file.listFiles(new FileFilterImpl());//传递过滤器对象
        for (File f : files) {
            //对遍历得到的file1对象进行判断,判断是否为文件夹,是的话继续递归遍历
            if (f.isDirectory()) {
                recurisonFiles(f.getAbsolutePath());
            } else {
                System.out.println(f);
            }
        }
    }
}

打印结果截图
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值