java File类基础 万字详解

简介: 对于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中,右斜杠本身有转义符的意思,因此,直接输出右斜杠会直接报错,如下:

publicclassTest {
publicstaticvoidmain(String[] args) {
//这么输出直接报错!//System.out.println("👴头铁,就要这么干:" + \);//System.out.println("👴头铁,就要这么干2:" + "\");/*Error:头铁一号会报非法字符的错误头铁二号会报未结束的字符串的错误Reason:这是因为\是转义符,\" 相当于输出一个双引号,但因此你字符串就烂尾了。*/    }
}

image.gif

               正确做法:

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

publicclassDemo {
publicstaticvoidmain(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类代码如下:

packageknowledge.iocurrent.file;
importjava.io.File;
importjava.io.IOException;
publicclassFileConstructors {
publicstaticvoidmain (String[] args) throwsIOException {//建议直接抛出父类异常//演示File类的三种构造方法:(1.txt之后会在创建功能的演示中创建)//1.File (String pathname):Filefile1=newFile("D:\\JAVA\\IDEA\\1.txt");
System.out.println("给👴看看file1对象长啥样:\n"+file1);
System.out.println("---------------------------------");
//2.File(String parent, String child):Filefile2=newFile("D:/JAVA/IDEA/", "2.txt");
System.out.println("给👴看看file2对象长啥样:\n"+file2);
System.out.println("---------------------------------");
//3.File(File parent, String child):Fileparent=newFile("D:/JAVA/IDEA");
Filefile3=newFile(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类代码如下:

packageknowledge.iocurrent.file;
importjava.io.File;
importjava.io.IOException;
publicclassCreate {
publicstaticvoidmain(String[] args) throwsIOException{//建议直接抛出父类异常IOException//演示三种创建方式://1.createNewFile():/*注意1.txt这个文件是不存在的,但是我们可以通过file1.createNewFile()方法,创建file1对象对应的文件,即1.txt文件*/Filefile1=newFile("D:\\JAVA\\IDEA\\fileEX\\1.txt");
booleanbool1=file1.createNewFile();
booleanbool1ex=file1.createNewFile();//相同的文件对象只能成功创建一次。除非你删了它。System.out.println("创建1.txt文件成功了吗:"+bool1);//第一次创建成功,是true。System.out.println("文件已经存在,创建1.txt文件成功了吗:"+bool1ex);//第二次输出就是false了,因为已经存在。System.out.println();
//2.mkdir:Filefile2=newFile("D:\\JAVA\\IDEA\\fileEX\\1.txt但目录");
booleanbool2=file2.mkdir();
System.out.println("创建1.txt目录情况如何:"+bool2);
System.out.println();
//3.mkdirs:Filefile3=newFile("D:\\JAVA\\IDEA\\fileEX\\我是目录\\a\\b");
booleanbool3=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类作为演示类,代码如下:

packageknowledge.iocurrent.file;
importjava.io.File;        //莫忘了导包importjava.io.IOException;
publicclassDelete {
publicstaticvoidmain(String[] args) throwsIOException{
//演示删除功能:Filefile1=newFile("D:\\JAVA\\IDEA\\fileEX\\1.txt");
booleanbool=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类代码如下:

packageknowledge.iocurrent.file;
importjava.io.File;
importjava.io.IOException;
publicclassJudge {
publicstaticvoidmain(String[] args) throwsIOException {
//演示三种判断方法://1.isDirectory()://先来封装一个目录的file对象Filefile1=newFile("D:\\JAVA\\IDEA\\fileEX\\我是目录");
booleanbool1=file1.isDirectory();
System.out.println("file1对象对应的路径是不是目录:"+bool1);
System.out.println("---------------------------------------------");
//2.isFile():booleanbool2=file1.isFile();
System.out.println("file1对象对应的路径是不是文件:"+bool2);
System.out.println("---------------------------------------------");
//3.exists():Filefile2=newFile("D:\\JAVA\\IDEA\\fileEX\\1.txt");
//注意这时候这个文件还没有被创建booleanbool3=file2.exists();
booleanbool3ex=file2.isFile();
System.out.println("file2对应的1.txt这个文件现在存在吗:"+bool3);
System.out.println("1.txt现在还没创建,那它是文件吗:"+bool3ex);
System.out.println("---------------------------------------------");
file2.createNewFile();
booleanbool4=file2.exists();
booleanbool4ex=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类代码如下:

packageknowledge.iocurrent.file;
importjava.io.File;
importjava.io.IOException;
importjava.util.Arrays;
publicclassObtain {
publicstaticvoidmain(String[] args) throwsIOException {
//演示File类的五种常用获取方法://1.getAbsolutePath():获取file对象对应的绝对路径Filefile=newFile("D:/JAVA/IDEA/fileEX");
StringabsolutePath=file.getAbsolutePath();
System.out.println("输出file对象的绝对路径:"+absolutePath);
/*Notice:①在进行创建File对象时,若使用的就是一个绝对路径创建的,则输出的相对路径与绝对路径是一样的。②只有创建的File对象是相对路径,输出的相对路径与绝对路径才会不同。因此我们这里输出的相对路径和绝对路径是一样的。*/System.out.println("=================================");
//2.getPath(): 获取file对象对应的相对路径Stringpath=file.getPath();
System.out.println("输出file对象的相对路径:"+path);
System.out.println("=================================");
//3.getName(): 获取file的文件名StringfileName=file.getName();
System.out.println("输出file对象的文件名:"+fileName);
System.out.println("=================================");
//4.list(): 获取指定目录下所有文件(夹)的名称数组String[] fileNames=file.list();
/*获取到的名称数组我们使用增强for来遍历。之后的File数组同理。*/System.out.println("使用增强for遍历名称数组如下:");
for (StringfName : 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 (FilefilePlus : 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类作演示:

               代码:

packageknowledge.iocurrent.file;
importjava.io.File;
importjava.io.IOException;
publicclassPs {
publicstaticvoidmain(String[] args) throwsIOException {
//copy一下1.txt的相对路径FilefilePS=newFile("javapace/fileTest/1.txt");
StringabsolutePath=filePS.getAbsolutePath();
Stringpath=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-----------------------------------------------------------------------------");

目录
相关文章
|
6天前
|
Java 开发工具
【Azure Storage Account】Java Code访问Storage Account File Share的上传和下载代码示例
本文介绍如何使用Java通过azure-storage-file-share SDK实现Azure文件共享的上传下载。包含依赖引入、客户端创建及完整示例代码,助你快速集成Azure File Share功能。
183 5
|
3月前
|
Java 编译器 API
Java 密封类:精细化控制继承关系
Java 密封类:精细化控制继承关系
307 83
|
1月前
|
安全 Java 数据建模
Java记录类:简化数据载体的新选择
Java记录类:简化数据载体的新选择
182 101
|
1月前
|
安全 Java 开发者
Java记录类:简化数据载体的新方式
Java记录类:简化数据载体的新方式
230 100
|
2月前
|
安全 IDE Java
Java记录类型(Record):简化数据载体类
Java记录类型(Record):简化数据载体类
331 120
|
11天前
|
存储 Java 索引
用Java语言实现一个自定义的ArrayList类
自定义MyArrayList类模拟Java ArrayList核心功能,支持泛型、动态扩容(1.5倍)、增删改查及越界检查,底层用Object数组实现,适合学习动态数组原理。
65 4
|
16天前
|
IDE JavaScript Java
在Java 11中,如何处理被弃用的类或接口?
在Java 11中,如何处理被弃用的类或接口?
109 5
|
19天前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
85 1
|
19天前
|
Java Unix Go
【Java】(8)Stream流、文件File相关操作,IO的含义与运用
Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中。!但本节讲述最基本的和流与 I/O 相关的功能。我们将通过一个个例子来学习这些功能。
116 1
|
19天前
|
Java Go 开发工具
【Java】(8)正则表达式的使用与常用类分享
正则表达式定义了字符串的模式。正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。
144 1