• 10.1 File类


     

     前言:

    java.io包中的File类是唯一一个可以代表磁盘文件的对象,它定义了一些用于操作文件的方法。通过调用File类提供的各种方法,可以创建、删除或者重命名文件,判断硬盘上某个文件是否存在,查询文件最后修改时间,等等。本节将针对File类进行详细讲解。

     10.1.1 创建File对象

    我的笔记:

    File类的构造方法

    `java.io.File` 类提供了几个构造方法,常用的有:

    方法声明功能描述
    File(String pathname) 通过指定的一个字符串类型的文件路径创建一个File对象
    File(String parent, String child) 根据指定的一个字符串类型的父路径和一个字符串类型的子路径(包括文件名称)创建一个File对象
    File(File parent, String child)根据指定的一个File类的父路径和一个字符串类型的子路径(包括文件名称)创建一个File对象

    这些构造方法允许您使用字符串路径或者 `File` 对象和子路径字符串来创建 `File` 对象。在这些方法中,您需要传入文件路径。

    例子

    以下是一个简单的示例代码,演示如何使用 `File` 类的构造方法创建 `File` 对象。

    1. import java.io.File;
    2. public class Example01 {
    3.     public static void main(String[] args) {
    4.         File f = new File("D:\\file\\a.txt");  //使用绝对路径创建File对象
    5.         File f1 = new File("src\\Hello.java"); //使用相对路径创建File对象
    6.         
    7.         System.out.println(f);
    8.         System.out.println(f1);
    9.     }
    10. }

    在这个例子中,`f` 是通过绝对路径创建的 `File` 对象,而 `f1` 是通过相对路径创建的。 

    注意事项

    在Windows中,目录的路径分隔符是反斜线 `\`,但在Java字符串中,`\` 是一个转义字符,所以要写成 `\\`。也可以使用正斜线 `/` 作为路径分隔符,例如 "D:/file/a.txt"。

    总结

    在这一节中,我们学习了如何使用 `java.io.File` 类的构造方法创建 `File` 对象。这些构造方法允许我们使用不同的方式(绝对路径、相对路径、父路径+子路径)来创建 `File` 对象,非常灵活。同时,我们也注意到了在路径字符串中要正确使用路径分隔符。

     10.1.2 File类常用的方法

    `java.io.File` 类具有一系列的方法,可以用来操作文件和目录。以下是一些常用方法的概览和描述。

    #### 常用方法

    1. **exists()**
       - 返回类型:`boolean`
       - 描述:判断File对象指向的文件或目录是否存在。若存在则返回`true`,否则返回`false`。

    2. **delete()**
       - 返回类型:`boolean`
       - 描述:删除File对象指向的文件或目录。若删除成功则返回`true`,否则返回`false`。

    3. **createNewFile()**
       - 返回类型:`boolean`
       - 描述:当File对象指向的文件不存在时,该方法将尝试创建一个新文件。若创建成功则返回`true`,否则返回`false`。

    4. **getName()**
       - 返回类型:`String`
       - 描述:返回File对象指向的文件或目录的名称。

    5. **getPath() 和 getAbsolutePath()**
       - 返回类型:`String`
       - 描述:`getPath()` 返回File对象指向的路径,而 `getAbsolutePath()` 返回File对象指向的绝对路径。

    6. **getParentFile()**
       - 返回类型:`String`
       - 描述:返回File对象指向的文件或目录的父目录。

    7. **canRead() 和 canWrite()**
       - 返回类型:`boolean`
       - 描述:判断File对象指向的文件或目录是否可读/可写。若是则返回`true`,否则返回`false`。

    8. **isFile() 和 isDirectory()**
       - 返回类型:`boolean`
       - 描述:判断File对象指向的是否是文件或目录。若是则返回`true`,否则返回`false`。

    9. **isAbsolute()**
       - 返回类型:`boolean`
       - 描述:判断File对象指向的文件或目录的路径是否是绝对路径。

    10. **lastModified()**
        - 返回类型:`long`
        - 描述:返回文件最后修改时间的毫秒值,从1970年1月1日0时0分0秒算起。

    11. **length()**
        - 返回类型:`long`
        - 描述:返回文件的长度,单位是字节。

    12. **list() 和 listFiles()**
        - 返回类型:`String[]` 和 `File[]`
        - 描述:`list()` 递归列出指定目录的全部内容(包括子目录与文件)的名称,`listFiles()` 返回一个包含File对象所有子文件和子目录的File数组。

    #### 例子

    1. import java.io.File;
    2. public class Example02 {
    3.     public static void main(String[] args) {
    4.         File file = new File("src/test.txt");
    5.         
    6.         System.out.println("文件是否存在:" + file.exists());
    7.         System.out.println("文件名:" + file.getName());
    8.         System.out.println("文件大小:" + file.length() + " bytes");
    9.         System.out.println("文件相对路径:" + file.getPath());
    10.         System.out.println("文件绝对路径:" + file.getAbsolutePath());
    11.         System.out.println("文件的父级对象是否为文件:" + file.isFile());
    12.         System.out.println("文件删除是否成功:" + file.delete());
    13.     }
    14. }

    #### 特别的方法

    1. **createTempFile() 和 deleteOnExit()**
       - 描述:`createTempFile()` 用于创建一个临时文件。`deleteOnExit()` 方法在Java虚拟机退出时自动删除临时文件。

    1. import java.io.File;
    2. import java.io.IOException;
    3. public class Example03 {
    4.     public static void main(String[] args) throws IOException {
    5.         File f = File.createTempFile("itcast-", ".txt");
    6.         f.deleteOnExit(); // Java虚拟机退出时自动删除文件
    7.         System.out.println("f是否为文件:" + f.isFile());
    8.         System.out.println("f的相对路径:" + f.getPath());
    9.     }
    10. }

    #### 注意事项和小技巧

    - 在使用 `delete()` 方法删除文件或目录前,务必先使用 `exists()` 方法检查其是否存在。
    - 使用 `createNewFile()` 创建新文件时,要处理可能抛出的 `IOException` 异常。
    - 利用 `createTempFile()` 和 `deleteOnExit()` 可以方便地管理临时文件,无需手动删除。

     

    10.1.3 遍历目录下的文件

    我的笔记:

    遍历目录

    `java.io.File` 类提供了 `list()` 方法,该方法可以返回一个目录下所有文件和目录的名称字符串数组。结合这些名称,你可以遍历指定目录下的所有文件。

    1. 遍历指定目录下的所有文件

    这是最基础的遍历方式,以下是一个简单的实例演示:

    1. import java.io.File;
    2. public class Example04 {
    3.     public static void main(String[] args) {
    4.         File file = new File("D:\\javase03");
    5.         
    6.         if(file.isDirectory()) {
    7.             String[] names = file.list();
    8.             for (String name : names) {
    9.                 System.out.println(name);
    10.             }
    11.         }
    12.     }
    13. }

    在这个示例中,我们创建了一个指向 "D:\\javase03" 目录的 `File` 对象。我们通过调用 `isDirectory()` 方法判断这个路径是否指向一个存在的目录。如果是,我们就调用 `list()` 方法来获取该目录下所有文件和子目录的名称,并依次打印它们。

    注意事项

    - **检查目录存在性**:
      在调用 `list()` 方法之前,通过 `isDirectory()` 方法检查指定路径是否是一个存在的目录是很重要的,因为 `list()` 方法在路径不是一个目录或者目录不存在时会返回 null。

    - **遍历子目录**:
      如果需要遍历包括子目录中的文件在内的所有文件,需要递归地处理每个子目录。

    笔记总结

    - `java.io.File` 类中的 `list()` 方法可以用于获取一个目录下所有文件和目录的名称。
    - 在调用 `list()` 方法之前,应该使用 `isDirectory()` 方法检查路径是否指向一个存在的目录。
    - 可以使用三种不同的方式进行遍历:遍历指定目录下的所有文件,遍历指定目录下具有指定扩展名的文件,以及遍历包括子目录中的文件在内的所有文件。
    - 对于需要深度遍历子目录的场景,需要递归地处理每个子目录。

     10.1.4 删除文件及目录

    #### 目标:

    - 学习如何使用Java中的File类的delete()方法来删除文件或目录。
    - 理解如何递归地删除非空目录。

    #### 关键概念:

    1. **File类的delete()方法:**
       - **作用:** 用于删除由File对象表示的文件或目录。
       - **返回值:** 如果成功删除则返回true,否则返回false。

    2. **非空目录的删除:**
       - **概述:** File类的delete()方法无法直接删除包含文件或子目录的目录。
       - **解决方法:** 需要递归地删除目录中的所有子目录和文件。

    #### 示例代码:

    ##### 删除文件或空目录

    1. import java.io.*;
    2. public class Example07 {
    3.     public static void main(String[] args) {
    4.         File file = new File("D:\\hello");
    5.         if (file.exists()) {
    6.             System.out.println(file.delete()); // 如果hello目录是空的,将会被删除并返回true。
    7.         }
    8.     }
    9. }

    ##### 递归删除非空目录

    1. import java.io.*;
    2. public class Example08 {
    3.     public static void main(String[] args) {
    4.         File file = new File("D:\\hello");
    5.         deleteDir(file);
    6.         System.out.println("删除成功!");
    7.     }
    8.     
    9.     public static void deleteDir(File dir) {
    10.         if (dir.exists()) {
    11.             File[] files = dir.listFiles();
    12.             for (File file : files) {
    13.                 if (file.isDirectory()) {
    14.                     deleteDir(file);
    15.                 } else {
    16.                     file.delete();
    17.                 }
    18.             }
    19.         }
    20.         dir.delete(); // 最后删除原始目录
    21.     }
    22. }

    笔记总结:

    1. **基础操作:**
       - 使用`delete()`方法可以删除文件或空目录。
       - 如果尝试删除非空目录,`delete()`方法将返回false,表示删除失败。

    2. **递归删除:**
       - 要删除非空目录,需要递归地遍历并删除所有子目录和文件。
       - 示例代码Example08演示了如何实现这一操作,首先检查目录是否存在,然后获取目录中的所有文件和子目录,并对每一个进行检查。如果是目录,就递归调用`deleteDir`方法;如果是文件,就直接删除。最后,删除原始目录。

     

     

     

     

     

     

     

     

  • 相关阅读:
    10分钟了解7个Java11的新功能
    android入门之 Support Library
    养老院管理系统设计与实现-计算机毕业设计源码+LW文档
    四十九、cookie与session
    剪切板中,经常用到的gpt编程提问
    有关Java发送邮件信息(支持附件、html文件模板发送)
    SoftwareTest4 - 咋设计一个好的测试用例
    第二章 第八节:列表的增删改查
    js截取,拼接,字符串方法
    Docker 中 jdk8容器里无法使用 JDK 的 jmap 等命令的问题
  • 原文地址:https://blog.csdn.net/tang7mj/article/details/133457919