java File类基础 万字详解(通俗易懂)

目录

一、前言:

        1.人话:

        2.关于相对路径和绝对路径:

        3.关于java中 要打出右斜杠'\'的问题:

                错误做法:               

                正确做法:

                 为啥讲这个?

二、概念(介绍):

三、构造方法:

        1.File (String pathname):

        2.File(String parent, String child):

        3.File(File parent, String child):

        4.代码演示:

四、成员方法:

        1.创建功能的方法:

                ①前言:

                ②常见三种创建方式:

                ③代码演示:

        2.删除功能的方法:

                ①常用删除方法:

                ②代码演示:

        3.判断功能的方法:

                ①常用三种判断方法:

                ②代码演示:

        4.获取功能的方法:

                ①常见七种获取方法:

                ②代码演示:

                相对路径和绝对路径的具体展示:           

五、完结撒❀


一、前言:

        1.人话:

  • 大佬们好,今天分享一下关于File类的那些事儿,File类常用的构造方法和成员方法up都会一一进行代码演示。这篇博文也是我们“API——常用工具”专题——IO流篇章的第二篇博文(异常基础 --> File类 --> IO流基础)。
  • 注意事项——①代码中的注释也很重要;不要眼高手低,自己跟着敲一遍才真正有收获;点击文章的侧边栏目录或者文章开头的目录可以进行跳转。
  • 良工不示人以朴,up所有文章都会适时补充完善。大家如果有问题都可以在评论区进行交流或者私信up。感谢阅读!

        2.关于相对路径和绝对路径:

                绝对路径:  指的是从顶层目录(windows下为盘符)开始定位,形成的路径。

                相对路径:  指的是从当前目录(IDEA默认从当前项目下的src目录开始)开始定位,形成的路径。

                如果是IDEA项目中的文件,你可以直接右键,选择Copy Path/Refrence... ,(当然如果你用中文的话,肯定能找到),演示如下:(之后讲到File类的获取方法时有具体的代码演示)

                如上面GIF图所示,Absolute Path即绝对路径,下面的Path From Content Root就是相对路径🌶。 PS:建议使用绝对路径。

        3.关于java中 要打出右斜杠'\'的问题:

                错误做法:               

                这是新手很容易犯的一个错误。因为File类操作路径,而路径分隔符不是左斜线就是右斜线,但在java中,右斜杠本身有转义符的意思,因此,直接输出右斜杠会导致报错,如下:

public class Test {
    public static void main(String[] args) {
        //这么输出直接报错!
        //System.out.println("👴头铁,就要这么干:" + \);
        //System.out.println("👴头铁,就要这么干2:" + "\");

        /*
            Error:
                头铁一号会报非法字符的错误
                头铁二号会报未结束的字符串的错误
            Reason:
                这是因为\是转义符,\" 相当于输出一个双引号,
                但因此你字符串就烂尾了。
        */
    }
}

                正确做法:

                想打印出一条右斜杠,需要连续输入两个\\键,如下:

public class Demo {
    public static void main(String[] args) {
        //如何输出右斜杠?
        System.out.println("给👴输出右斜杠:" + "\\");
    }
}

                 为啥讲这个?

                File类会操作文件路径,而文件路径的路径分隔符可以使用一条左斜线/ 或者两条右斜线\\ ,单独使用一条右斜线会报错


二、概念(介绍):

                File,即文件、文件夹,一个File对象表示了磁盘上的某个文件文件夹在java中,File类实质是以文件或者文件夹的路径来操作的File 类是 java.io 包中唯一代表磁盘文件本身的对象。File类的类图如下 : 

                File类实现了Serializable和Comparable两个接口。当然,学过API常用工具专题——集合篇章后,这就是老面孔了。我们再来回顾一下——
                Serializable接口的实现,使File类的对象可以串行化,串行化后,对象可以进行网络传输,也可以保存到文件。而Comparable接口的实现使得File对象可以进行比较

                File类以文件或文件夹为单位进行操作,因此不能直接访问文件的内容,若想访问文件内容,需要配合java中的IO流来完成。大家不用着急,下一节内容就是我们的IO流基础🍐。


三、构造方法:

        1.File (String pathname):

                需要传入String类型的文件路径。

                需要用File类型作接收。

        2.File(String parent, String child):

                和第一种构造方式大同小异。不过是将文件路径劈开了,分为父路径和子路径两部分,作为两个形参。

        3.File(File parent, String child):

                与前两种构造方式略有差异:将文件路径劈开后,又先将父路径封装成了File类型,然后再分别将“File类型的父路径” 和 “String类型的子路径”传上去。

        4.代码演示:

                我们以D:\JAVA\IDEA下的fileEX作为演示,注意这是个空文件夹,如图:

                我们先在file包下创建一个FileConstructors类作为演示类,如图:

                 FileConstructors类代码如下:

package knowledge.iocurrent.file;

import java.io.File;
import java.io.IOException;

public class FileConstructors {
    public static void main (String[] args) throws IOException {//建议直接抛出父类异常
//演示File类的三种构造方法:(1.txt之后会在创建功能的演示中创建)
    //1.File (String pathname):
        File file1 = new File("D:\\JAVA\\IDEA\\1.txt");
        System.out.println("给👴看看file1对象长啥样:\n" + file1);
        System.out.println("---------------------------------");

    //2.File(String parent, String child):
        File file2 = new File("D:/JAVA/IDEA/", "2.txt");
        System.out.println("给👴看看file2对象长啥样:\n" + file2);
        System.out.println("---------------------------------");

    //3.File(File parent, String child):
        File parent = new File("D:/JAVA/IDEA");
        File file3 = new File(parent, "3.txt");
        System.out.println("给👴看看file3对象长啥样:\n" + file3);
    }
}

                输出结果 : 

                可以看到,我们的File类型对象,其实就是磁盘文件的路径


四、成员方法:

        1.创建功能的方法:

                ①前言:

                对于创建功能的方法,如果合法路径对应的文件不存在,就创建该文件并返回true;如果该文件已经存在,就不创建,返回false其实对于 删除功能 和 判断功能 的方法,返回值类型也为boolean类型。

                ②常见三种创建方式:

                createNewFile() : 见名知意,就是创建一个新文件。(根据当前File类对象对应的路径创建文件)

                mkdir():                创建目录(即文件夹),但只能是单级目录

                mkdirs():              创建目录(即文件夹),但既可以是单级目录,又可以是多级目录

                PS :  mkdir其实就是make directory的缩写。
                         当我们创建一个File类对象时,仅仅是在内存中有了一个File对象,还未与磁盘发生实际的联系,只有当我们通过createNewFile()方法成功创建文件后,磁盘的相应位置才会创建实际存在着的文件。 

                ③代码演示:

                我们仍然以刚才那个路径作演示,注意fileEX这个文件夹下是空的,如图:

                我们先在file包下创建一个Create类作为演示类,如图:          

                Create类代码如下:

package knowledge.iocurrent.file;

import java.io.File;
import java.io.IOException;

public class Create {
    public static void main(String[] args) throws IOException{//建议直接抛出父类异常IOException
//演示三种创建方式:
    //1.createNewFile():
        /*
            注意1.txt这个文件是不存在的,但是我们可以通过file1.createNewFile()方法,
            创建file1对象对应的文件,即1.txt文件
         */
        File file1 = new File("D:\\JAVA\\IDEA\\fileEX\\1.txt");
        boolean bool1 = file1.createNewFile();
        boolean bool1ex = file1.createNewFile();//相同的文件对象只能成功创建一次。除非你删了它。

        System.out.println("创建1.txt文件成功了吗:" + bool1);//第一次创建成功,是true。
        System.out.println("文件已经存在,创建1.txt文件成功了吗:" + bool1ex);//第二次输出就是false了,因为已经存在。
        System.out.println();

    //2.mkdir:
        File file2 = new File("D:\\JAVA\\IDEA\\fileEX\\1.txt但目录");
        boolean bool2 = file2.mkdir();

        System.out.println("创建1.txt目录情况如何:" + bool2);
        System.out.println();

    //3.mkdirs:
        File file3 = new File("D:\\JAVA\\IDEA\\fileEX\\我是目录\\a\\b");
        boolean bool3 = file3.mkdirs();

        System.out.println("创建多级目录成功了没有:" + bool3);
    }
}

                输出结果及运行效果——

                输出结果:

                运行效果:(如下GIF图)

        2.删除功能的方法:

                ①常用删除方法:

                delete() :         删除当前File类对象指定的文件(只能删除文件 和 空文件夹)

                PS : 注意也是以boolean类型作为接收

                ②代码演示:

                大家注意,方才我们用创建方法在D:\JAVA\IDEA\fileEX目录下创建了1.txt文本文件,如图:

                现在我们试着用File类的删除功能来删掉1.txt这个文本文件。我们在file包下创建一个Delete类作为演示类,代码如下:

package knowledge.iocurrent.file;

import java.io.File;        //莫忘了导包
import java.io.IOException;

public class Delete {
    public static void main(String[] args) throws IOException{
//演示删除功能:
        File file1 = new File("D:\\JAVA\\IDEA\\fileEX\\1.txt");
        boolean bool = file1.delete();

        System.out.println("1.txt到底删掉了没有:" + bool);
    }
}

                输出结果及运行效果——

                输出结果:

                运行效果:

                🆗,1.txt壮烈牺牲。(bushi)     

        3.判断功能的方法:

                ①常用三种判断方法:

                isDirectory():        判断file对象对应的路径是否为目录

                isFile():                 判断file对象对应的路径是否为文件

                exists():                判断file对象对应的路径是否存在

                ②代码演示:

                我们还是在D:\JAVA\IDEA\fileEX目录下作演示,因为刚才唯一的1.txt文本文件在演示删除功能时删掉了,所以我们可以先对这个不存在的路径做一个判断,再用file对象重新创建一个1.txt文本文件,然后再对它进行判断。结果不言而喻:第一次判断不存在,第二次存在。

                我们在file包下创建一个Judge类作为演示类,如图:

                Judge类代码如下:

package knowledge.iocurrent.file;

import java.io.File;
import java.io.IOException;

public class Judge {
    public static void main(String[] args) throws IOException {
//演示三种判断方法:
    //1.isDirectory():
        //先来封装一个目录的file对象
        File file1 = new File("D:\\JAVA\\IDEA\\fileEX\\我是目录");
        boolean bool1 = file1.isDirectory();

        System.out.println("file1对象对应的路径是不是目录:" + bool1);
        System.out.println("---------------------------------------------");
    //2.isFile():
        boolean bool2 = file1.isFile();

        System.out.println("file1对象对应的路径是不是文件:" + bool2);
        System.out.println("---------------------------------------------");
    //3.exists():
        File file2 = new File("D:\\JAVA\\IDEA\\fileEX\\1.txt");
        //注意这时候这个文件还没有被创建
        boolean bool3 = file2.exists();
        boolean bool3ex = file2.isFile();
        System.out.println("file2对应的1.txt这个文件现在存在吗:" + bool3);
        System.out.println("1.txt现在还没创建,那它是文件吗:" + bool3ex);
        System.out.println("---------------------------------------------");

        file2.createNewFile();
        boolean bool4 = file2.exists();
        boolean bool4ex = file2.isFile();
        System.out.println("已经创建的1.txt这个文件现在存在了吗:" + bool4);
        System.out.println("已经创建的1.txt是文件吗:" + bool4ex);
    }
}
/*
    Summary:
        文件只有在被创建后,才能被判断为是文件!
*/

                输出结果及运行效果——

                输出结果:

                从输出结果来看,假如1.txt文件没有被创建时,判断它是不是文件,结果居然是false;而当它被创建后,它既存在,也是文件。因此我们发现:The file can be judged as file only when it has been created. 文件只有在被创建后才能被判断为是文件

                运行效果:

        4.获取功能的方法:

                ①常见七种获取方法:

                getAbsolutePath():         获取file对象对应的绝对路径

                getPath():                        获取file对象对应的相对路径

                getName():                      获取file的文件名

                getParent():                     获取file的父级目录

                length():                          获取file的当前大小(以字节[byte]计算,以long类型做接收)

                list():                                获取指定目录下所有文件(夹)的名称数组

                listFiles():                        获取指定目录下所有文件(夹)的File类型数组

                PS:

                1)绝对路径与相对路径的区别我们在前言已经说过了,这里不再赘述。
                2)再强调一点,IDEA相对路径一般指相对于当前项目路径开始 (以src目录开头)。up还是建议使用绝对路径。
                3)list() 和 listFiles() 两个方法,主要区别是返回值类型不同,前者用String[] 作接收,后者用File[]作接收。
                4)前四种获取方法均以String类型作接收。

                ②代码演示:

                开始之前,先确认一下我们fileEX文件夹下有哪些文件,如图:

                我们在file包下创建一个Obtain类作为演示类,如图:

                 Obtain类代码如下:

package csdn.knowledge.api_tools.iocurrent.file;

import java.io.File;
import java.io.IOException;
import java.util.Arrays;

public class Obtain {
    public static void main(String[] args) throws IOException {
//演示File类的五种常用获取方法:
    //1.getAbsolutePath():获取file对象对应的绝对路径
        File file = new File("D:\\JAVA\\IDEA\\fileEX\\");
        String absolutePath = file.getAbsolutePath();
        System.out.println("输出file对象的绝对路径:" + absolutePath);
        /*
            Notice:
            ①因为up这里在创建File对象时,使用的是绝对路径,
             所以我们这里输出的相对路径和绝对路径是一样的。
            ②只有创建的File对象是相对路径,输出的相对路径与绝对路径才会不同。
         */
        System.out.println("=================================");

    //2.getPath(): 获取file对象对应的相对路径
        String path = file.getPath();
        System.out.println("输出file对象的相对路径:" + path);
        System.out.println("=================================");

    //3.getName(): 获取file的文件名
        String fileName = file.getName();
        System.out.println("输出file对象的文件名:" + fileName);
        System.out.println("=================================");

    //4.getName(): 获取file的文件名
        String parentName = file.getParent();
        System.out.println("输出file对象的父级目录:" + parentName);
        System.out.println("=================================");

    //5.length(): 获取file文件的大小(以字节为单位进行计算)
        File file1 = new File("D:\\JAVA\\IDEA\\fileEX\\1.txt");
        long size = file1.length();
        System.out.println("file1文件的大小 = " + size + " byte");
        System.out.println("=================================");

    //6.list(): 获取指定目录下所有文件(夹)的名称数组
        String[] fileNames = file.list();
        /*
            获取到的名称数组我们使用增强for来遍历。
            之后的File数组同理。
         */
        System.out.println("使用增强for遍历名称数组如下:");
        for (String fName : fileNames) {
            System.out.println(fName);
        }
        //此处也可以使用Arrays.toString() 方法来打印,如下:
        System.out.println();
        System.out.println("我们再用一下Arrays.toString()方法试试:");
        System.out.println(Arrays.toString(fileNames));
        System.out.println("=================================");

    //7.listFiles():  获取指定目录下所有文件(夹)的File类型数组
        File[] files = file.listFiles();
        System.out.println("使用增强for遍历File数组如下:");
        for (File filePlus : files) {
            System.out.println(filePlus);
        }

        System.out.println();
        System.out.println("我们再用一下Arrays.toString()方法试试:");
        System.out.println(Arrays.toString(files));
        System.out.println("=================================");
    }
}

                运行结果 : 

                相对路径和绝对路径的具体展示:           

                因为我们一开始是以绝对路径创建的file对象,所以输出它的绝对路径和相对路径是一样的。只有当以相对路径来创建file对象时,输出的绝对路径和相对路径才不一样。而IDEA默认相对路径只能从项目名开始,因此,我们再以项目下的一个文件为例具体展示一下:

                如图,我们以javapace/fileTest/1.txt文件夹为栗:

                然后以一个PS类作演示:

                代码:

package knowledge.iocurrent.file;

import java.io.File;
import java.io.IOException;

public class Ps {
    public static void main(String[] args) throws IOException {
        //copy一下1.txt的相对路径
        File filePS = new File("javapace/fileTest/1.txt");
        String absolutePath = filePS.getAbsolutePath();
        String path = filePS.getPath();

        System.out.println("1.txt的绝对路径是:" + absolutePath);
        System.out.println("1.txt的相对路径是:" + path);
    }
}
/*
    总结:
            ①在进行创建File对象时,若使用的就是一个绝对路径创建的,
            则输出的相对路径与绝对路径是一样的。
            ②只有创建的File对象是相对路径,输出的相对路径与绝对路径才会不同。
*/

                输出结果:

                🆗,这样就看出它们的区别了。


五、完结撒❀:

  • 🆗,以上就是我们File类的全部内容了。
  • 总结一下,大家需要了解File类的本质,即File类操作的是磁盘中文件的路径,并且要熟悉File类常用的成员方法(创建功能,删除功能,判断功能,获取功能)。
  • 下一节内容就是我们“API——常用工具”专题——IO流篇章的最后一篇博文哩,没错,就是我们的IO流基础感谢阅读!

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

  • 14
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cyan_RA9

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值