首页 > 编程笔记 > Java笔记 阅读:49

Java File类的用法(非常详细)

Java 的 File 类可以用于处理文件目录。在对一个文件进行输入/输出时,必须先获取有关该文件的基本信息,如文件是否可以读取、能否被写入、路径是什么等。

java.io.File 类不属于 Java 流系统,但它是文件流进行文件操作的辅助类,提供了获取文件基本信息以及操作文件的一些方法,通过调用 File 类提供的相应方法,能够完成创建文件、删除文件以及对目录的一些操作。

Java File类及其常用方法

File 类的对象是一个“文件或目录”的抽象,它并不打开文件或目录,而是指定要操作的文件或目录。

File 类的对象一旦创建,就不能再修改。要创建一个新的 File 对象,需要使用它的构造方法,如下表所示:

表:File 类的构造方法
构造方法 方法描述
public File(String filename) 创建 File 对象,filename 表示文件或目录的路径
public File(String parent, String child) 创建 File 对象,parent 表示上级目录,child 表示指定的子目录或文件名
public File(File obj, String child) 创建 File 对象,obj 表示 File 对象,child 表示指定的子目录或文件名

使用上表所列的哪种构造方法要由其他被访问的文件来决定。例如,当在应用程序中只用到一个文件时,使用第 1 种构造方法最合适;如果使用了一个公共目录下的几个文件,那么使用第 2 种或第 3 种构造方法会更方便。

创建 File 类的对象后,就可以使用 File 类的相关方法来获取文件信息。接下来,先了解一下 File 类的常用方法,如下表所示。

表:File类的常用方法
方法 方法描述 备注
String getName() 获取相关文件名 与文件名相关的方法
String getPath() 获取文件路径
String getAbsolutePath() 获取文件绝对路径
String getParent() 获取文件上级目录名称
boolean renameTo(File newName) 更改文件名,成功则返回 true,否则返回 false
boolean exists() 检测文件对象是否存在 文件检测相关方法
boolean canWrite() 检测文件对象是否可写
boolean canRead() 检测文件对象是否可读
boolean isFile() 检测文件对象是否是文件
boolean isDirectory() 检测文件对象是否是目录
boolean isAbsolute() 检测文件对象是否是绝对路径
long lastModified() 返回此 File 对象表示的文件或目录最后一次被修改的时间 文件常用属性相关方法
long length() 返回此 File 对象表示的文件或目录的长度
boolean delete() 删除文件或目录。如果 File 对象为目录,则该目录为空,方可删除。删除成功,返回 true,否则返回 false
boolean mkdir() 创建 File 对象指定目录。如果创建成功,则返回 true,否则返回 false 目录相关方法
boolean mkdirs() 创建 File 对象指定的目录,如果此目录的父级不存在,则还会创建父目录。如创建成功,则返回 true,否则返回 false
String[] list() 返回此 File 对象表示的目录中的文件和目录的名称所组成的字符串数组

接下来,通过一个案例来演示 File 类常用方法的基本使用,先在当前目录创建一个 txt.txt 文件,在里面输入“C语言中文网欢迎您!”。
import java.io.*;
import java.util.*;
import java.text.SimpleDateFormat;

public class Demo {
    public static void main(String[] args) {
        File file = new File("src/demo.txt");
        System.out.println("文件是否存在-->" + file.exists());
        System.out.println("文件是否可写-->" + file.canWrite());
        System.out.println("文件是否可读-->" + file.canRead());
        System.out.println("文件是否是文件-->" + file.isFile());
        System.out.println("文件是否是目录-->" + file.isDirectory());
        System.out.println("文件是否是绝对路径-->" + file.isAbsolute());
        System.out.println("文件名是-->" + file.getName());
        System.out.println("文件的路径是-->" + file.getPath());
        System.out.println("文件的绝对路径是-->" + file.getAbsolutePath());
        System.out.println("文件的上级路径是-->" + file.getParent());
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        System.out.print("最后修改时间-->");
        System.out.println(sdf.format(new Date(file.lastModified())));
        System.out.println("文件长度是-->" + file.length());
    }
}
程序的运行结果如下:
文件是否存在-->true
文件是否可写-->true
文件是否可读-->true
文件是否是文件-->true
文件是否是目录-->false
文件是否是绝对路径-->false
文件名是-->txt.txt
文件的路径是-->src\demo.txt
文件的绝对路径是-->D:\src\demo.txt
文件的上级路径是-->src
最后修改时间-->2025-03-15
文件长度是-->26
程序中,在程序中构造了 File 类的对象,运用 File 类的各个方法得到文件的各种相关属性。

在第 18~20 行代码中,通过格式化时间信息,获取文件最后修改时间,最后打印文件 demo.txt 相关属性的信息。

Java遍历目录下的文件

File 类用来操作文件和获得文件的信息,但是不提供对文件读取的方法,这些方法由文件流提供。

File 类中提供了 list() 方法和 listFiles() 方法,用来遍历目录下的所有文件。两者不同之处是 list() 方法只返回文件名,没有路径信息;而 listFiles() 方法不但返回文件名称,还包含路径信息。

接下来,通过案例来演示 list() 方法与 listFiles() 方法的使用:
import java.io.*;

public class Demo {
    public static void main(String[] args) {
        System.out.printf("-----------list()方法-----------\n");
        File file = new File("D:\\javaCode"); // 创建File对象
        if (file.isDirectory()) { // 判断file目录是否存在
            String[] list = file.list(); // 打印文件名
            for (String fileName : list) {
                System.out.println(fileName);
            }
        }
        System.out.printf("-----------listFiles()方法-----------\n");
        files(file);
    }

    public static void files(File file) {
        File[] listFile = file.listFiles(); // 遍历目录下所有文件
        for (File f : listFile) {
            if (f.isDirectory()) { // 判断是否是目录
                files(f); // 递归调用
            }
            System.out.println(f.getAbsolutePath());
        }
    }
}
程序的运行结果如下:
------------------list()方法-------------------
javaDemo
demo.txt
----------------listFiles()方法----------------
D:\javaCode\.idea\.gitignore
D:\javaCode\.idea\misc.xml
D:\javaCode\.idea\modules.xml
D:\javaCode\.idea\uiDesigner.xml
D:\javaCode\.idea\workspace.xml
D:\javaCode\.idea
D:\javaCode\chapter02.iml
D:\javaCode\out\production\chapter\Demo02.class
程序中:
通过程序运行结果可以看到,listFiles() 方法输出的信息比 list() 方法输出的信息更加详细,而且 listFiles() 方法返回值是 File 类型,可以直接使用该文件。

注意,在 Windows 系统中,目录的分隔符是反斜杠(\)。但是,在 Java 语言中,使用反斜杠表示转义字符,所以如果需要在 Windows 系统的路径下包括反斜杠,则应该使用两条反斜杠,如 D:\\javaCode 或者直接用斜杠(/)也可以。

Java File删除文件及目录

在程序设计中,除了遍历文件外,文件的删除操作也很常见,Java 中通过使用 File 类的 delete() 方法来对文件进行删除操作。

接下来,通过案例来演示如何删除文件及目录:
import java.io.*;

public class Demo {
    public static void main(String[] args) {
        String path = "D:/javaCode/chapter02/out";
        deleteD(path);
    }

    private static void deleteD(String pp) {
        File file = new File(pp);
        if (file.isFile()) {
            while (file.exists()) {
                System.out.println("删除了文件:" + file.getName());
                file.delete();
            }
        } else {
            File[] listFiles = file.listFiles();
            for (File file2 : listFiles) {
                try {
                    deleteD(file2.getAbsolutePath());
                } catch (Exception e) {
                    System.out.println(e.getMessage());
                }
            }
            file.delete();
        }
    }
}
程序的运行结果如下:
删除了文件:Demo02.class
删除了文件:Demo0201.class
删除了文件:Demo0202.class
删除了文件:Demo03.class
删除了文件:Demo05.class
删除了文件:Demo06.class
在 main() 方法中,deleteD(File file) 方法中将待删除的内容以字符串形式传入。调用方法时创建 File 对象,然后遍历该目录下所有文件,判断遍历到的是否是目录:
第 18~23 行代码增加了确保程序健壮性的异常处理。

注意,File 类的 delete() 方法只是删除一个指定的文件,如果目录下还有子目录,是无法直接删除的,需要递归删除。另外,在 Java 中是直接从虚拟机中将文件或目录删除,可以不经过回收站,文件无法恢复,所以使用 delete() 操作时要谨慎。

相关文章