哈喽,各位小伙伴们,你们好呀,我是喵手。
今天我要给我们分享一些自己日常学习到的一些知识点,并以文字的形式跟我们一起沟通,互相学习,一个人虽能够走的更快,但一群人能够走的更远。
我是一名后端开发爱好者,作业日常接触到最多的便是Java言语啦,所以我都尽量抽业余时间把自己所学到所会的,经过文章的形式进行输出,期望以这种办法协助到更多的初学者或许想入门的小伙伴们,同时也能对自己的技能进行沉淀,加以复盘,查缺补漏。
小伙伴们在批阅的进程中,假如觉得文章不错,欢迎点赞、保藏、重视哦。三连即是对作者我写作道路上最好的鼓舞与支撑!
前语
在Java开发中,文件IO操作是常见的操作之一,而文件操作的基础便是File类。File类供给了一系列的办法来操作文件和文件夹,它是Java文件和目录途径名的笼统表明。
摘要
在本文中,我们将会深化了解Java中的File类,探求它的运用场景、优缺点,并经过源代码解析和实际事例来演示如何运用File类。
File类
简介
在Java中,File类表明一个文件或许目录的途径。它供给了创立、删去、查询、修改文件和目录的办法。
File类的构造办法有以下几种:
-
File(String pathname)
:经过给定的途径名字符串创立一个新的File实例。 -
File(String parent, String child)
:经过给定的父途径和子途径字符串创立一个新的File实例。 -
File(File parent, String child)
:从给定的父笼统途径名和子途径名字符串创立一个新的File实例。
File类常用的办法包含:
-
exists()
:测验此笼统途径名表明的文件或目录是否存在。 -
isDirectory()
:测验此笼统途径名表明的文件是否为目录。 -
isFile()
:测验此笼统途径名表明的文件是否为标准文件。 -
createNewFile()
:创立此笼统途径名指定的新文件。 -
mkdir()
:创立此笼统途径名指定的目录。 -
list()
:回来一个字符串数组,命名由此笼统途径名表明的目录中的文件和目录。 -
renameTo(File dest)
:将此笼统途径名表明的文件重命名为指定的途径名。
源代码解析
以下是File类的源代码:
public class File implements Serializable, Comparable<File> {
//字段
private final String path;
//构造办法
public File(String pathname) {
if (pathname == null) {
throw new NullPointerException();
}
this.path = fs.normalize(pathname);
}
//办法
public boolean exists() {
SecurityManager security = System.getSecurityManager();
if (security != null) {
security.checkRead(path);
}
return ((fs.getBooleanAttributes(this) & FileSystem.BA_EXISTS) != 0);
}
public boolean isDirectory() {
SecurityManager security = System.getSecurityManager();
if (security != null) {
security.checkRead(path);
}
return ((fs.getBooleanAttributes(this) & FileSystem.BA_DIRECTORY) != 0);
}
public boolean isFile() {
SecurityManager security = System.getSecurityManager();
if (security != null) {
security.checkRead(path);
}
return ((fs.getBooleanAttributes(this) & FileSystem.BA_REGULAR) != 0);
}
//省略其他办法
}
能够看出,File类的完成十分简略,首要是对文件、目录的一些根本操作。完成了Serializable、Comparable 接口。其中包含了一个字段path,表明文件途径。构造办法用于初始化File目标,被传入的参数pathname表明文件的途径。办法中包含了exists()、isDirectory()、isFile()等用于判别文件是否存在、是否是目录、是否是文件的办法,并经过调用FileSystem类的办法获取文件的特点进行判别。该代码还省略了其他办法。
如下是部分源码截图:
运用场景事例
下面经过一些详细事例,来演示File类的运用场景。
创立目录
File dir = new File("mydir");
if(!dir.exists()) {
dir.mkdir();
}
创立文件
File file = new File("myfile.txt");
if(!file.exists()) {
file.createNewFile();
}
删去文件
File file = new File("myfile.txt");
if(file.exists()) {
file.delete();
}
列出目录下的文件和目录名
File dir = new File("mydir");
if(dir.isDirectory()) {
String[] files = dir.list();
for(String fileName : files) {
System.out.println(fileName);
}
}
拓宽:
这段代码的作用是遍历名为”mydir”的文件夹中的一切文件,假如该文件夹存在且是文件夹类型,那么将文件夹中一切文件的文件名打印出来。
详细剖析如下:
-
创立一个File目标dir,指定文件夹途径为”mydir”。
-
调用isDirectory()办法判别该File目标对应的途径是否是一个文件夹,假如是则持续履行。
-
调用list()办法获取该文件夹中的一切文件名,保存到一个字符串数组中。
-
遍历该字符串数组,对于每一个文件名,将其打印出来。
留意:该代码并不会输出文件夹的称号,只会输出文件夹中的文件名。假如需求输出文件夹称号,能够将System.out.println(dir.getName())添加到代码中。
遍历目录下的文件和目录
public static void traverse(File file) {
if(file.isFile()) {
System.out.println(file.getPath());
} else if(file.isDirectory()) {
File[] files = file.listFiles();
for(File f : files) {
traverse(f);
}
}
}
拓宽:
此代码为遍历文件体系中的一切文件和文件夹,并打印出一切文件的途径。
- 界说了一个静态办法
traverse()
,传入参数为File
类型的文件目标file
。 - 判别当时文件目标是否为文件,假如是文件,则打印出其途径。
- 假如不是文件,则判别其是否为文件夹,假如是文件夹,则获取该文件夹下一切文件和子文件夹,然后递归调用
traverse()
办法,对每个文件或子文件夹进行遍历操作。 - 当最底层的文件目标为文件时,履行进程 2,打印出其途径,然后回来上一级履行进程 3,持续遍历其他文件或文件夹。直到遍历完整个文件体系。
优缺点剖析
优点
- File类供给了丰厚的文件和目录操作办法,便利程序员进行文件IO操作。
- File类的运用十分简略,只需供给文件途径或文件名即可创立文件目标。
- File类的功用较好,适用于对大文件和目录的操作。
缺点
- File类在文件IO操作中对功用和内存的消耗较高,不适用于对很多的小文件的操作。
- File类无法完成文件确定和并发操作,不适用于多线程环境下的文件操作。
类代码办法介绍
以下是File类中比较重要的办法介绍:
exists()
public boolean exists()
测验此笼统途径名表明的文件或目录是否存在。
假如此笼统途径名表明的文件或目录存在,则回来 true;不然回来 false。
isDirectory()
public boolean isDirectory()
测验此笼统途径名表明的文件是否为目录。
假如此笼统途径名表明的文件为目录,则回来 true;不然回来 false。
isFile()
public boolean isFile()
测验此笼统途径名表明的文件是否为标准文件。
假如此笼统途径名表明的文件为标准文件,则回来 true;不然回来 false。
createNewFile()
public boolean createNewFile() throws IOException
创立此笼统途径名指定的新文件。
假如文件已存在,则不创立文件,并回来 false;不然创立一个新文件,回来 true。
mkdir()
public boolean mkdir()
创立此笼统途径名指定的目录。
假如目录已经存在,则不创立目录,并回来 false;不然创立一个新目录,回来 true。
list()
public String[] list()
回来一个字符串数组,命名由此笼统途径名表明的目录中的文件和目录。
假如此笼统途径名不表明一个目录,则回来 null。
renameTo()
public boolean renameTo(File dest)
将此笼统途径名表明的文件重命名为指定的途径名。
假如重命名操作成功,则回来 true;不然回来 false。
测验用例
以下是一些测验用例:
测验目录创立和删去
public static void testDirectory() {
//测验目录创立
File dir = new File("mydir");
if(!dir.exists()) {
dir.mkdir();
}
//测验目录删去
if(dir.exists()) {
dir.delete();
}
}
拓宽:
这段代码界说了一个静态的办法testDirectory(),用于测验目录的创立和删去。详细剖析如下:
-
创立File目标dir,指定了目录名为”mydir”。
-
判别目录是否存在,假如不存在,则运用mkdir()办法创立目录。
-
判别目录是否存在,假如存在,则运用delete()办法删去目录。
整体来说,这段代码首要是为了测验目录创立和删去的功用,假如目录存在,则会删去目录,假如不存在,则会创立目录。
测验文件创立和删去
public static void testFile() throws Exception {
//测验文件创立
File file = new File("myfile.txt");
if(!file.exists()) {
file.createNewFile();
}
//测验文件删去
if(file.exists()) {
file.delete();
}
}
拓宽: 如上代码界说了一个名为testFile的静态办法,它可能会抛出反常。办法中有以下几个进程:
- 创立一个名为”myfile.txt”的File目标。
- 假如该文件不存在,则运用createNewFile()办法创立该文件。
- 假如该文件存在,则运用delete()办法删去该文件。
能够看出,该办法的首要作用是测验文件创立和删去的功用。假如文件创立和删去正常,代码将不会抛出反常。不然,假如文件创立失利或删去失利,将会抛出反常。
测验文件重命名
package com.example.javase.se.classes;
import java.io.File;
/**
* @Author ms
* @Date 2023-11-05 17:56
*/
public class FileTest {
public static void testRename() throws Exception {
File oldFile = new File("test.txt");
if (!oldFile.exists()) {
oldFile.createNewFile();
}
File newFile = new File("newTest.txt");
if (oldFile.exists() && !newFile.exists()) {
oldFile.renameTo(newFile);
}
}
public static void main(String[] args) throws Exception {
testRename();
}
}
测验成果
依据如上测验用例,本地测验成果如下,仅供参考,你们也能够自行修改测验用例或许添加更多的测验数据或测验办法,进行熟练学习以此加深了解。
测验代码剖析
依据如上测验用例,在此我给我们进行深化详细的解读一下测验代码,以便于更多的同学能够了解并加深印象。
这是一个简略的文件操作示例,其中包含了文件的重命名操作。详细进程如下:
-
首要创立一个名为”test.txt”的文件目标 oldFile。
-
判别该文件目标是否存在,假如不存在,则经过调用 createNewFile() 办法创立一个新文件。
-
创立一个名为”newTest.txt”的新文件目标 newFile,同时判别 oldFile 是否存在且 newFile 不存在。假如建立,阐明能够将 oldFile 重命名为 newFile。
-
调用 renameTo() 办法完成重命名操作。
-
在 main() 办法中调用 testRename() 办法即可履行文件重命名操作。
需求留意的是,这儿的文件重命名操作是基于文件目标的,需求在同一个目录下操作。假如需求改变目录,能够先将原文件复制到新目录下,然后删去原文件。
全文小结
本文介绍了Java中的File类,包含其根本概念、运用场景、优缺点以及常用办法的阐明。经过实际事例和源码剖析,我们深化了解了File类的运用办法和内部完成机制。期望本文对初学者有所协助。
总结
File类是Java文件和目录途径名的笼统表明,它供给了一系列的办法来操作文件和目录。在文件IO操作中,File类的运用十分广泛,对于大文件和目录的操作也具有较好的功用。但在多线程环境下的文件操作和对小文件的操作上,File类存在一些不足。
… …
文末
好啦,以上便是我这期的全部内容,假如有任何疑问,欢迎下方留言哦,咱们下期见。
… …
学习不分先后,知识不分多少;事无巨细,当以谦虚求教;三人行,必有我师焉!!!
wished for you successed !!!
⭐️若喜欢我,就请重视我叭。
⭐️若对您有用,就请点赞叭。
⭐️若有疑问,就请评论留言告诉我叭。