• Java学习【深入解读File类:从基础到高级的完整指南】


    在这里插入图片描述
    🚀所属专栏:Java学习⭐⭐
    🚀欢迎互三👉: 2的n次方_⭐⭐

    File的概述和构造方法

    File对象表示路径,可以是文件,也可以是文件夹,这个路径可以是存在的,也可以是不存在的
    绝对路径:是从文件系统的根目录开始,到指定文件或目录的完整路径,它通常包含盘符
    相对路径:是相对于当前工作目录或某个已知目录的路径
    在这里插入图片描述
    首先第一个,就是传入一个完整的路径创建文件对象
    第二个:父级路径就是指包含该文件或目录的上一级目录的路径
    字级路径是是某个目录下的文件或子目录
    例如:"E:\java\a.txt"中的父级路径就是E:\java,子路径就是后面的a.txt

    下面是三种构造方法示例:

    public class FileDemo1 {
        public static void main(String[] args) {
            //E:\java\a.txt
            String str = "E:\\java\\a.txt";
            //根据文件路径创建文件对象
            File f1 = new File(str);
            System.out.println(f1);
    
            String parent1 = "E:\\java";
            String child1 = "a.txt";
    
            //根据父路径和子路径创建文件对象
            File f2 = new File(parent1,child1);
            System.out.println(f2);
    
            //把一个File表示的路径和一个String表示的路径进行拼接
            File parent2 = new File("E:\\java");
            String child2 = "a.txt";
            File f3 = new File(parent2,child2);
            System.out.println(f3);
        }
    }
    

    File常见的成员方法

    接下来介绍一下File中常见的成员方法的使用
    在这里插入图片描述

    🌙构造方法

    public class FileDemo2 {
        public static void main(String[] args) {
            String str = "E:\\java\\a.txt";
            File f1 = new File(str);
            //判断是否是文件夹
            System.out.println(f1.isDirectory());//false
            //判断是否是文件
            System.out.println(f1.isFile());//true
            //判断是否存在
            System.out.println(f1.exists());//true
        }
    }
    

    a.txt是一个文本文件,所以在判断是否是文件夹时返回值为false,同理如果传入的路径表示一个文件夹,在判断是否是文件时就会返回false,如果传入的是一个不存在的路径,在判断是否存在时也会返回false

    🌙length()

    length()方法返回的文件大小为字节

            File f1 = new File("E:\\java\\a.txt");
            long len = f1.length();
            System.out.println(len);
    

    这个是a.txt的基本信息
    在这里插入图片描述

    也正确的打印出了文件的字节大小

    在这里插入图片描述
    length()方法只能获取文件的大小,如果是一个文件夹的话就会返回0,获取文件夹的大小需要把文件夹里所有的文件大小都加到一起

    🌙getAbsoluteFile()和getPath()

    getAbsoluteFile():获取绝对路径

     		File f1 = new File("text\\file\\FileDemo3.java");
            File f2 = new File("E:\\java\\java.text\\text\\text\\file\\FileDemo3.java");
            //获取绝对路径
            System.out.println(f1.getAbsoluteFile());
            System.out.println(f2.getAbsoluteFile());
    

    不论创建对象时传入的是相对路径还是绝对路径,最后返回的都是绝对路径
    在这里插入图片描述

    getPath():返回定义文件时所使用的路径

    		File f1 = new File("text\\file\\FileDemo3.java");
            File f2 = new File("E:\\java\\java.text\\text\\text\\file\\FileDemo3.java");
            System.out.println(f1.getPath());
            System.out.println(f2.getPath());
    

    在这里插入图片描述

    🌙getName()和lastModified()

    getName就是获取名字,如果是文件,会获取完整的文件名,包括后缀名,如果是文件夹,也就会返回完整的文件夹的名字

    		File f2 = new File("text\\file\\FileDemo3.java");
    		//获取文件名,(文件名+后缀)
            System.out.println(f2.getName());
    		File f3 = new File("text\\file");
            //获取文件夹名
            String name = f3.getName();
            System.out.println(name);
    

    在这里插入图片描述

    lastModified()返回的是文件最后的修改时间,单位是毫秒,根据Date类,可以转换为想要的格式

    //获取文件最后修改时间(毫秒值)
            long time = f1.lastModified();
            //将毫秒值转换成日期对象
            Date date = new Date(time);
            //将日期对象转换成yyyy-MM-dd HH:mm:ss格式
            String time1 = date.toLocaleString();
            System.out.println(time1);
    

    在这里插入图片描述

    文件的创建和删除

    在这里插入图片描述
    在使用createNewFile时会有一个异常需要抛出处理
    在这里插入图片描述
    创建文件时,如果当前路径文件已存在,返回false,创建失败,同时,如果写入的父级路径不存在也会报错
    在这里插入图片描述
    createNewFile方法创建的一定是文件,如果路径中没有后缀,就会创建一个没有后缀的文件
    在这里插入图片描述

    public class FileDemo4 {
        public static void main(String[] args) throws IOException {
            File f1 = new File("E:\\java\\b.txt");
            //创建文件,如果当前路径文件已存在,返回false
            //如果父级路径不存在,就会报异常
            //createNewFile方法创建的一定是文件,如果路径中没有后缀,就会创建一个没有后缀的文件
            boolean flag = f1.createNewFile();
            System.out.println(flag);//true
        }
    }
    

    mkdir()和mkdirs()都是创建文件夹的方法,前面的是创建单级文件夹,后面是创建多级文件夹,如果用mkdir去创建多级文件夹就会报错,但如果用mkdirs去创建单极文件夹也能创建成功

    public class FileDemo4 {
        public static void main(String[] args) throws IOException {
            File f2 = new File("E:\\java\\aaa");
            //创建文件夹(目录),如果与已存在文件名重名,则创建失败,也不能创建多级文件夹
            System.out.println(f2.mkdir());
            //mkdirs:创建多级文件夹(既可以创建单极文件夹又可以创建多级文件夹)
            File f3 = new File("E:\\java\\aaa\\bbb\\ccc");
            System.out.println(f3.mkdirs());
            System.out.println(f2.delete());//true
            System.out.println(f3.delete());//true
        }
    }
    

    在这里插入图片描述

    delete方法只能删除文件和空的文件夹,并且不走回收站,彻底删除

    获取并遍历

    在这里插入图片描述
    listFiles:获取文件夹中的所有内容,把内容放在数组中返回

    public class FileDemo5 {
        public static void main(String[] args) {
            File f1 = new File("E:\\HTML");
            //listFiles:获取文件夹中的所有内容,把内容放在数组中返回
            File[] files = f1.listFiles();
            for(File f:files){
                System.out.println(f);
            }
        }
    }
    

    在这里插入图片描述
    注意:
    当调用者表示的路径不存在时,返回null
    当调用者表示的路径是文件时,返回null
    当调用者File表示的路径是一个空文件夹时,返回一个长度为0的数组
    当调用者File表示的路径是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回
    当调用者File表示的路径是一个有隐藏文件的文件夹时,会将里面所有的文件和文件夹的路径放在数组中返回,包括隐藏文件
    当调用者File表示的路径是需要权限才能访问的文件夹时,返回null

    在这里插入图片描述
    listRoots其实就是获取系统的盘符

    // 列出所有的盘符
            File[] arr1 = File.listRoots();
            System.out.println(Arrays.toString(arr1));
    

    在这里插入图片描述
    list获取的就是当前路径下所有的文件或文件夹的名字

    //list:获取当前路径下所有的内容(名字)
            File f1 = new File("E:\\java");
            String[] arr2 = f1.list();
            for (String s : arr2) {
                System.out.println(s);
            }
    

    在这里插入图片描述
    接下来的方法是利用文件名过滤器获取当前该路径下的所有内容

    下面是一个获取文件中所有txt文件的例子:

    FilenameFilter是一个函数式接口,可以通过匿名内部类的方式进行实现
    在这里插入图片描述

    		File f2 = new File("E:\\java");
            //accept方法的形参:依次表示java文件夹里面每一个文件或文件夹的路径
            //参数一:父级路径
            //参数二:子级路径
            //返回值:true表示当前路径保留,false表示当前路径不保留
            String[] arr3 = f2.list(new FilenameFilter() {
                @Override
                public boolean accept(File dir, String name) {
                    File src = new File(dir, name);
                    //筛选出以txt为后缀的文件
                    if (src.isFile() && name.endsWith(".txt")) {
                        return true;
                    } else return false;
                }
            });
            System.out.println(Arrays.toString(arr3));
    
    

    利用listFiles()也可以实现这个要求,listFiles()返回一个File对象数组,数组中的元素是File对象,这些对象代表了目录中的文件或子目录的完整路径,进而可以通过调用方法进行判断

    		File f3 = new File("E:\\java");
            File[] arr4 = f3.listFiles();
            for (File f : arr4) {
                if (f.isFile() && f.getName().endsWith(".txt")) {
                    System.out.println(f.getName());
                }
            }
    

    listFiles()也可以用文件名过滤器的方法来实现,

    		File[] arr5 = f4.listFiles(new FileFilter() {
                @Override
                public boolean accept(File pathname) {
                    return pathname.isFile() && pathname.getName().endsWith(".txt");
                }
            });
            System.out.println(Arrays.toString(arr5));
            System.out.println("--------------------");
    
            File[] arr6 = f4.listFiles(new FilenameFilter() {
                @Override
                public boolean accept(File dir, String name) {
                    return new File(dir, name).isFile() && name.endsWith(".txt");
                }
            });
            System.out.println(Arrays.toString(arr6));
    

    FileFilter用于过滤File对象,使用FileFilter时已经拥有了一个File对象,因此可以直接使用该对象的属性而无需再次创建新的File对象
    FilenameFilter用于过滤文件名,使用FilenameFilter时由于只获得了文件名,因此如果需要访问文件的属性(如是否是文件),则必须再次使用文件名和目录来创建新的File对象。

  • 相关阅读:
    【日常系列】LeetCode《19·BFS 和 DFS》
    C++关系运算符重载
    前端控制小数点精度及数字千位分割
    为什么我写了路由懒加载但代码却没有分割?
    商业化广告--体系学习-- 3 -- 行业蓝图篇 -- 广告主、媒体、第三方检测
    ACM新手入门之杭电150题使用指南及C语言学习推荐
    5.typescript函数
    Linux发行版X华为鲲鹏openEuler
    Java.lang ClassLoader findClass()方法具有什么功能呢?
    【摸鱼系列】3万张4K壁纸还不够你换的吗?python还可以实现更多采集可能
  • 原文地址:https://blog.csdn.net/2202_76097976/article/details/139794127