java File类基础 万字详解

举报
Cyan_RA9 发表于 2023/04/03 09:11:48 2023/04/03
【摘要】 对于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都会一一进行代码演示。这篇文章以基础为主,适合0基础快速入门,或者初学者查缺补漏都可以,注意代码中的注释也很重要。我尽量以通俗易懂的方式分享给大家。所有文章都会适时补充,良工不示人以朴。感谢阅读!(PS: IDEA讲解,点击目录可以跳转。)

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

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

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

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

image.png

                如上面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:
                这是因为\是转义符,\" 相当于输出
                一个双引号,但因此你字符串就烂尾了。
        */
    }
}

image.gif

                正确做法:

                想打印出一条右斜杠,就要按下两次\\键,如下:

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

image.gif

                 为啥讲这个?

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

二、概念(介绍):

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

                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作为演示,注意这是个空文件夹,如图:

 image.png

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

image.png

                 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);
    }
}

image.gif

                输出结果:

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

四、成员方法:

        1.创建功能的方法:

                ①前言:

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

                ②常见三种创建方式:

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

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

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

                PS:   mkdir其实就是make directory的缩写。 

                ③代码演示:

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

image.png

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

image.png

                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);
    }
}

image.gif

                输出结果及运行效果:

                输出结果:

image.png

                运行效果: image.png

        2.删除功能的方法:

                ①常用删除方法:

                delete() :         删除当前对象指定的文件

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

                ②代码演示:

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

image.png

                现在我们试着用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);
    }
}

image.gif

                输出结果及运行效果:

                输出结果:

image.png

                运行效果:

image.png

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

        3.判断功能的方法:

                ①常用三种判断方法:

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

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

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

                ②代码演示:

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

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

image.png

                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:
        文件只有在被创建后,才能被判断为是文件!
*/

image.gif

                输出结果及运行效果:

                输出结果:

image.png

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

                运行效果:

image.png      

        4.获取功能的方法:

                ①常见五种获取方法:

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

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

                getName():                      获取file的文件名

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

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

                PS:1)绝对路径与相对路径的区别我们在前言已经说过了,这里不再赘述。

                        2)再强调一点,IDEA相对路径一般相对于当前项目路径开始。up还是建议使用绝对路径。

                        3)list()和listFiles()两个方法,主要区别是返回值类型不同,前者用String[] 作接收,后者用File[]作接收。

                        4)前三种获取方法均以String类型作接收。

                ②代码演示:

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

image.png

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

image.png

                 Obtain类代码如下:

package knowledge.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:
            ①在进行创建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.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("=================================");
    //5.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("=================================");
    }
}
/*
    Notice:
    list方法仅仅能获取到指定文件夹下第一层的名称数组,
    也就是说,再内层的文件名称就获取不到了。
*/

image.gif

                输出结果:

image.png                       

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

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

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

image.png

                然后以一个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对象是相对路径,输出的相对路径与绝对路径才会不同。
*/

image.gif

                输出结果:

image.png

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

五、撒❀:

                感谢你可以看到这里,觉得不错就给up点个赞吧。

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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。