哈喽,各位小伙伴们,你们好呀,我是喵手。

  今天我要给我们分享一些自己日常学习到的一些知识点,并以文字的形式跟我们一起沟通,互相学习,一个人虽能够走的更快,但一群人能够走的更远。

  我是一名后端开发爱好者,作业日常接触到最多的便是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类开端,学习Java文件操作

运用场景事例

下面经过一些详细事例,来演示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”的文件夹中的一切文件,假如该文件夹存在且是文件夹类型,那么将文件夹中一切文件的文件名打印出来。

详细剖析如下:

  1. 创立一个File目标dir,指定文件夹途径为”mydir”。

  2. 调用isDirectory()办法判别该File目标对应的途径是否是一个文件夹,假如是则持续履行。

  3. 调用list()办法获取该文件夹中的一切文件名,保存到一个字符串数组中。

  4. 遍历该字符串数组,对于每一个文件名,将其打印出来。

  留意:该代码并不会输出文件夹的称号,只会输出文件夹中的文件名。假如需求输出文件夹称号,能够将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);
        }
    }
}

拓宽:

此代码为遍历文件体系中的一切文件和文件夹,并打印出一切文件的途径。

  1. 界说了一个静态办法 traverse(),传入参数为 File 类型的文件目标 file
  2. 判别当时文件目标是否为文件,假如是文件,则打印出其途径。
  3. 假如不是文件,则判别其是否为文件夹,假如是文件夹,则获取该文件夹下一切文件和子文件夹,然后递归调用 traverse() 办法,对每个文件或子文件夹进行遍历操作。
  4. 当最底层的文件目标为文件时,履行进程 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(),用于测验目录的创立和删去。详细剖析如下:

  1. 创立File目标dir,指定了目录名为”mydir”。

  2. 判别目录是否存在,假如不存在,则运用mkdir()办法创立目录。

  3. 判别目录是否存在,假如存在,则运用delete()办法删去目录。

  整体来说,这段代码首要是为了测验目录创立和删去的功用,假如目录存在,则会删去目录,假如不存在,则会创立目录。

测验文件创立和删去

public static void testFile() throws Exception {
    //测验文件创立
    File file = new File("myfile.txt");
    if(!file.exists()) {
        file.createNewFile();
    }
    //测验文件删去
    if(file.exists()) {
        file.delete();
    }
}

拓宽:   如上代码界说了一个名为testFile的静态办法,它可能会抛出反常。办法中有以下几个进程:

  1. 创立一个名为”myfile.txt”的File目标。
  2. 假如该文件不存在,则运用createNewFile()办法创立该文件。
  3. 假如该文件存在,则运用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();
    }
}

测验成果

  依据如上测验用例,本地测验成果如下,仅供参考,你们也能够自行修改测验用例或许添加更多的测验数据或测验办法,进行熟练学习以此加深了解。

从File类开端,学习Java文件操作

测验代码剖析

  依据如上测验用例,在此我给我们进行深化详细的解读一下测验代码,以便于更多的同学能够了解并加深印象。

  这是一个简略的文件操作示例,其中包含了文件的重命名操作。详细进程如下:

  1. 首要创立一个名为”test.txt”的文件目标 oldFile。

  2. 判别该文件目标是否存在,假如不存在,则经过调用 createNewFile() 办法创立一个新文件。

  3. 创立一个名为”newTest.txt”的新文件目标 newFile,同时判别 oldFile 是否存在且 newFile 不存在。假如建立,阐明能够将 oldFile 重命名为 newFile。

  4. 调用 renameTo() 办法完成重命名操作。

  5. 在 main() 办法中调用 testRename() 办法即可履行文件重命名操作。

  需求留意的是,这儿的文件重命名操作是基于文件目标的,需求在同一个目录下操作。假如需求改变目录,能够先将原文件复制到新目录下,然后删去原文件。

全文小结

  本文介绍了Java中的File类,包含其根本概念、运用场景、优缺点以及常用办法的阐明。经过实际事例和源码剖析,我们深化了解了File类的运用办法和内部完成机制。期望本文对初学者有所协助。

总结

  File类是Java文件和目录途径名的笼统表明,它供给了一系列的办法来操作文件和目录。在文件IO操作中,File类的运用十分广泛,对于大文件和目录的操作也具有较好的功用。但在多线程环境下的文件操作和对小文件的操作上,File类存在一些不足。

… …

文末

好啦,以上便是我这期的全部内容,假如有任何疑问,欢迎下方留言哦,咱们下期见。

… …

学习不分先后,知识不分多少;事无巨细,当以谦虚求教;三人行,必有我师焉!!!

wished for you successed !!!


⭐️若喜欢我,就请重视我叭。

⭐️若对您有用,就请点赞叭。

⭐️若有疑问,就请评论留言告诉我叭。