File 类常用方法 及 递归

一.File类

1.java.io.File 类是文件和目录文件名的抽象表示,

            java中使用File类对象来表示我们系统中的文件或者文件夹
             (指定的文件或者文件夹 需要指定路径来表示)
           要用于文件和目录的创建,查找和删除操作.
           可以根据路径 将 我们系统中的文件或者文件夹 封装一个File类型对象

2.构造方法

            File(String pathname)  根据路径 封装File对象
                通过将给定路径名字符串转换为抽象路径名来创建一个新File实例

            File(File parent, String child)
                根据 parent 抽象路径名 和 child 路径名字符串创建一个新 File实例

            File(String parent,String child)
                根据 parent 路径名字符串和 child 路径名字符串创建一个新 File实例
          

3.文件的名称 是包括后缀的

            文件 可以没有后缀
            文件夹 的 名称 可以有.这个符号

            在同一个 目录下 文件名 与文件夹 名 不能重复

            在计算机中 万物皆字节

            常用的 获取功能
                public String getName() 获取对象的名字
                获取对象的大小 占用字节数
                public Long Length() 获取文件中的字节个数

                public String getAbsoutePath() 获取 file对象的 绝对路径
                    就是 从盘符开始算的一个 路径字符串

                public String getPath() 获取file对象的 封装路径
                 也就是 封装的时候怎么写 这里得到的路径 就是什么

             
4.相对路径和绝对路径的问题
            绝对路径 从盘符开始算起的路径

            相对路径 在一个项目中 相对于当前项目的路径(参照物 --> 项目)

            public String getAbsoutePath() 获取 file对象的 绝对路径
                    就是 从盘符开始算的一个 路径字符串
            public String getPath() 这个方法 获取的是 file对象的 封装路径
                 
             
5.File类 判断功能
            返回值肯定是 boolean类型

            public boolean exists() 判断file封装的路径 是否真实存在
            
            public boolean isDirectory() 判断 file对象 是否是 文件夹 
            
            public boolean isFile() 判断 file对象 是否是 文件

            判断
                一个file对象 不是文件 那么就是文件夹?
                错!!
                如果 是一个 假的文件 那么 既不是 文件 也不是文件夹    


6.java中
            File类中 创建 与删除功能

            public boolean createNewFile() 创建一个新的文件,可以创建任意后缀名的文件
                注意: 如果该路径不存在 则可以创建成功 (可以访问的情况下)
                如果 该文件已经有了呢? 创建失败

            public boolean mkdir() 创建一个新的文件夹 单级的
            public boolean mkdirs() 创建多级文件夹

            public boolean delete() 删除文件或者文件夹
                删除的时候 不会走 回收站 慎用

            注意:
                创建文件和文件夹是两个功能,只和功能本身有关系,和文件的后缀无关.
                在删除的时候,必须要不指定目录下的所有的子目录和子文件全部删除之后,才能删除.


7.File类 之 高级获取功能
            就是用在 目录上的
            public String[] list获取目录下 的 所有文件或者文件夹的名字
            比如 D:\\aaa 目录

            因为 仅仅获取名字 没有什么太大效果
            public File[] listFiles()
                获取 该目录下 的所有 文件 或者文件夹 的 File对象形式
                这样做 得到的 对象 可以完成 更多的功能

                假如 高级获取方法 使用一个文件去调用了呢
                    会出现 异常的
        
       

二.递归
1.递归
            在java中 就是方法 自己 内部 调用了 自己的现象

            public void method(){
                method()
            }
            直接递归
                a(){
                    a();
                }

            间接递归
                a(){
                    b();
                }
                b(){
                    c();
                }
                c(){
                    a();
                }

            Math.MAX(1,Math.Max(0,2)) 不是递归

            递归的注意事项
                1:要有边界条件,跳出递归的条件(递归必须要有出口)
                2:如果递归过深的话,会造成内存溢出(递归不宜过深)
                3.递归必须有规律

2.文件过滤器

            java.io.FileFilter 是一个接口 是File的过滤器
            该接口对象 可以传递给File类的listFiles(FileFilter) 作为参数

              boolean accept(File pathname) 测试pathname是否应该包含在当前的File目录中 符合就返回true

              文件过滤器
                File[] listFiles()
                  将 该目录下 所有的文件及文件夹 返回 存储到File数组中

                File[] listFiles(FileFilter filter)
                  将 该目录下 所有的文件及文件夹 尽心过滤之后  返回 过滤之后的 存储到File数组中

                  按照某种规则 进行文件的筛选  将符合要求的 返回到数组中

                  那么过滤的规则 写那呢
                    boolean accept(File pathname)
                      这个规则 就是 来过滤file对象 是否 会进入到返回数组的
                        是不是符合这个规则  true 符合 就添加
                        false 不符合 就不要

补充
    1.转义符:\
            在java中\代表转义符。意思:改变原有的含义,转化为新的含义.
            例如:
                t 代表的就是一个字符t
                \t代表的就是一个tab键,将原来的字符t转义成了一个tab键
            
            如果我们想使用\作为一个普通的字符就必须对\进行转义:使用\\代表普通字符\
            
    2.创建目录和文件的注意事项:
            a> 如果我们创建的是一个单级目录使用 mkdir()就是可以
            
            b> 如果我们创建的是多级目录使用 mkdirs();
            
            c> 如果我们创建的是一个文件路径 createNewFile();
            
            d> 当我们创建一个文件的时候:
                D:\\aa\a.txt
                
                当aa目录存在,我们可以直接创建a.txt文件
                    eg:
                        File file = new File("D:\\aa\a.txt");
                        file.createNewFile();
                
                当aa目录不存在,我们必须要先把aa目录单独创建成功之后,才能在创建a.txt
                    eg:
                        File file = new File("D:\\aa");
                        file.mkdir();//必须先创建aa目录
                        
                        File file1 = new File(file,"a.txt");
                        file1.createNewFile();

    3.补充案例:
            通过键盘录入获取一个文件夹路径,并且统计该文件夹下所有的文件大小
            
            代码:
                public class Demo02 {
                    /*
                        通过键盘录入获取一个文件夹路径,并且统计该文件夹下所有的文件大小
                     */
                    public static void main(String[] args) {
                        //通过键盘录入获取一个文件夹路径
                        File dir = getDir();
                        long length = getLength(dir);
                        System.out.println(length);
                    }

                    /*
                        并且统计该文件夹下所有的文件大小
                     */
                    public static long getLength(File dir){
                        //定义一个统计变量
                        long sum = 0;
                        //获取指定目录下,所有的子目录和子文件
                        File[] subFiles = dir.listFiles();
                        //对数组进行遍历
                        for (File subFile : subFiles) {
                            //只有文件才有大小
                            if(subFile.isFile()){
                                sum += subFile.length();
                            }else{
                                sum +=  getLength(subFile);
                            }
                        }

                        return sum;
                    }
                    案例:

                    /*
                        功能:通过键盘录入获取一个文件夹路径
                            两个明确:
                                明确返回类型:File

                                明确参数列表:无
                     */
                    public static File getDir(){
                        //创建键盘录入对象
                        Scanner sc = new Scanner(System.in);
                        System.out.println("请输入一个文件夹路径:");
                        /*
                            1.这个路径在磁盘中是否存在
                            2.这个路径是不是文件路径
                         */
                        while(true) {
                            String line = sc.nextLine();//这是一个字符串,他能够去调用File中的方法么
                            //把line字符串的路径,封装成File对象
                            File file = new File(line);
                            //判断是否存在
                            if (!file.exists()) {
                                System.out.println("您输入的文件夹路径不存在,请重新输入一个文件夹路径:");
                                continue;
                            }

                            if (file.isFile()) {
                                System.out.println("您输入的是一个文件路径,请输入一个文件夹路径:");
                                continue;
                            }

                            return file;
                        }
                    }
                }
            
                 
                 
             
             
             
             
             
             
             

猜你喜欢

转载自blog.csdn.net/snack_TC_dora/article/details/81175414
今日推荐