File 类

Java IO API 中的 Java File 类(java.io.File)可让你访问底层文件系统。使用 Java File 类,你可以

  • 检查文件或目录是否存在。

  • 创建不存在的目录。

  • 读取文件的长度。

  • 重命名或移动文件。

  • 删除文件。

  • 检查路径是文件还是目录。

  • 读取目录中的文件列表。

本 Java 文件教程将告诉你更多相关信息。

注意:

(1)Java File 类仅允许你访问文件和目录元数据。如果需要读取或写入文件内容,应使用 FileInputStream、FileOutputStream 或 RandomAccessFile。

(2)如果要使用 Java NIO(Java 的非阻塞 IO API),则必须使用 java.nio.FileChannel 类。Java File 和 FileChannel 均可使用,但如果你想要纯 Java NIO 解决方案,请使用 Java NIO FileChannel 类。

创建一个文件

在使用文件系统或 File 类做任何事情之前,必须先创建一个 Java File 实例。下面是创建 Java File 实例的示例:

File file = new File("c:\\data\\input-file.txt");

Java File 构造函数的参数是你希望 File 实例指向的文件在底层文件系统中的文件路径。请注意,文件或目录路径实际上不必引用现有的文件或目录。如果不是,你就不会从文件构造函数中获得异常。当我们要检查文件是否存在或创建新文件时,这种行为非常有用。

Java File 类还有其他一些构造函数,你可以用它们以不同的方式实例化 File 实例。

检查文件或目录是否存在

你可以使用 File exists() 方法检查 Java File 对象引用的文件是否存在。下面是一个检查文件是否存在的示例:

File file = new File("c:\\data\\input-file.txt");
boolean fileExists = file.exists();

上述代码同样适用于目录。检查目录是否存在所需的唯一改动是向 Java File 构造函数传递指向目录的文件系统路径,而不是指向文件的路径。下面是一个检查目录是否存在的示例:

File file = new File("c:\\data");
boolean fileExists = file.exists();

如果不存在目录,则创建该目录

如果目录还不存在,你可以使用 Java File 类创建目录。为此,文件类包含 mkdir() 和 mkdirs() 方法。

mkdir() 方法会创建一个尚未存在的单一目录。下面是一个通过 Java File 类创建单个目录的示例:

File file = new File("c:\\users\\jakobjenkov\\newdir");
boolean dirCreated = file.mkdir();

如果 c:\users\jakobjenkov 目录已经存在,上述代码将为 jakobjenkov 创建一个名为 newdir 的子目录。如果目录已创建,mkdir() 返回 true;如果未创建,则返回 false。

mkdirs() 将创建文件对象所代表路径中缺少的所有目录。下面是一个通过 Java File 类创建多个目录的示例:

File file = new File("c:\\users\\jakobjenkov\\newdir");
boolean dirCreated = file.mkdirs();

如果 C 盘存在,本例将创建 c:\users\jakobjenkov\newdir 路径下的所有目录。如果所有目录都已创建,mkdirs() 方法将返回 true,否则返回 false。

文件长度

通过 Java File 类,你可以读取文件的字节长度。要读取文件长度,请调用 File length() 方法。下面是一个通过 Java File length() 方法读取文件长度的示例:

File file = new File("c:\\data\\input-file.txt");
long length = file.length();

重命名或移动文件或目录

要重命名(或移动)文件,请调用文件类的 renameTo() 方法。下面是一个简单的例子:

File file = new File("c:\\data\\input-file.txt");
boolean success = file.renameTo(new File("c:\\data\\new-file.txt"));

如前文所述,renameTo() 方法还可用于将文件移动到不同的目录。传递给 renameTo() 方法的新文件名不必与文件所在目录相同。

renameTo() 方法返回布尔值(true 或 false),表示重命名是否成功。移动文件的重命名可能会因各种原因而失败,如文件已打开、文件权限错误等。

顺便说一下,Java File renameTo() 方法也适用于目录。只需向 File 构造函数传递目录路径,而不是文件路径即可。

删除文件或目录

要删除文件,请调用 Java File delete() 方法。下面是一个简单的示例:

File file = new File("c:\\data\\input-file.txt");
boolean success = file.delete();

delete() 方法返回布尔值(true 或 false),表示删除是否成功。删除文件可能会因为各种原因而失败,如文件处于打开状态、文件权限错误等。

Java 文件 delete() 方法也适用于目录,这意味着你也可以使用该方法删除目录。

递归删除目录及其子目录

Java 文件 delete() 方法只能在目录为空的情况下删除目录。要删除包含文件和子目录的目录,必须先遍历该目录并删除所有文件和子目录,然后才能删除根目录。这种遍历必须递归进行,因此还必须删除子目录及其子目录的所有内容。否则根目录的删除将失败。下面是一个可以递归删除一个目录及其所有子目录和文件的 Java 方法:

public static boolean deleteDir(File dir){
    File[] files = dir.listFiles();
    if(files != null){
        for(File file : files){
            if(file.isDirectory()){
                deleteDir(file);
            } else {
                file.delete();
            }
        }
    }
    return dir.delete();
}

检查路径是文件还是目录

正如本 Java 文件教程前面多次提到的,File 对象既可以指向文件,也可以指向目录。你可以通过调用 File 对象的 isDirectory() 方法来检查 File 对象指向的是文件还是目录。如果 File 指向目录,该方法返回 true;如果 File 指向文件,该方法返回 false。下面是一个简单的示例:

File file = new File("c:\\data");
boolean isDirectory = file.isDirectory();

读取目录中的文件列表

你可以通过调用 Java File list() 方法或 listFiles() 方法来获取目录中所有文件的列表。list() 方法返回一个字符串数组,其中包含文件对象指向的目录的文件名和/或目录名。listFiles()方法返回一个 File 对象数组,表示 File 指向的目录中的文件和/或目录。

下面是一个通过 Java File list() 和 listFiles() 方法列出目录中所有文件的示例:

File file = new File("c:\\data");
String[] fileNames = file.list();
File[]   files = file.listFiles();


说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号