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

目录
相关文章
|
26天前
|
算法 Java 数据处理
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。HashSet基于哈希表实现,提供高效的元素操作;TreeSet则通过红黑树实现元素的自然排序,适合需要有序访问的场景。本文通过示例代码详细介绍了两者的特性和应用场景。
36 6
|
14天前
|
存储 安全 Java
java.util的Collections类
Collections 类位于 java.util 包下,提供了许多有用的对象和方法,来简化java中集合的创建、处理和多线程管理。掌握此类将非常有助于提升开发效率和维护代码的简洁性,同时对于程序的稳定性和安全性有大有帮助。
37 17
|
6天前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
10天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
50 4
|
11天前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
26 2
|
15天前
|
存储 安全 Java
如何保证 Java 类文件的安全性?
Java类文件的安全性可以通过多种方式保障,如使用数字签名验证类文件的完整性和来源,利用安全管理器和安全策略限制类文件的权限,以及通过加密技术保护类文件在传输过程中的安全。
|
16天前
|
Java 编译器 Maven
Java“class file contains wrong class”解决
当Java程序运行时出现“class file contains wrong class”错误,通常是因为类文件与预期的类名不匹配。解决方法包括:1. 确保类名和文件名一致;2. 清理并重新编译项目;3. 检查包声明是否正确。
|
19天前
|
Java 数据格式 索引
使用 Java 字节码工具检查类文件完整性的原理是什么
Java字节码工具通过解析和分析类文件的字节码,检查其结构和内容是否符合Java虚拟机规范,确保类文件的完整性和合法性,防止恶意代码或损坏的类文件影响程序运行。
|
19天前
|
Java API Maven
如何使用 Java 字节码工具检查类文件的完整性
本文介绍如何利用Java字节码工具来检测类文件的完整性和有效性,确保类文件未被篡改或损坏,适用于开发和维护阶段的代码质量控制。
|
19天前
|
存储 Java 编译器
java wrapper是什么类
【10月更文挑战第16天】
22 3