方法分类总览
File 类的方法主要可以分为以下几大类:
静态方法
文件/目录检测方法
文件操作方法
目录操作方法
路径获取方法
权限检查与设置方法

1. 静态方法
这些方法直接通过类名调用,与特定的文件实例无关。

方法签名	功能描述
static File[] listRoots()	|列出可用的文件系统根目录(例如,在 Windows 系统中返回 C:\, D:\ 等;在 Linux 或 macOS 中返回 /)。
2. 文件/目录检测方法
这些方法用于获取 File 对象所代表路径的基本信息。
方法签名	功能描述
boolean exists()		|最重要:判断文件或目录是否实际存在。
boolean isFile()		|判断是否为一个已存在的标准文件(不是目录)。
boolean isDirectory()	|判断是否为一个已存在的目录。
boolean isHidden()		|判断文件是否被标记为隐藏。
String getName()		|返回文件或目录的名称(不包含路径)。
long length()			|返回文件的长度(字节数)。如果对象是目录,返回值是未定义的。
long lastModified()		|返回文件最后被修改的时间戳(自1970年1月1日以来的毫秒数)。

3. 文件操作方法
这些方法用于创建、删除、重命名文件。

方法签名	功能描述
boolean createNewFile()		|原子性操作:当且仅当该名称的文件尚不存在时,创建一个新的空文件。
boolean delete()			|删除文件或空目录。如果目录不为空,删除会失败。
void deleteOnExit()			|请求在虚拟机终止时(程序正常退出时)删除此文件或目录。
boolean renameTo(File dest)	|重命名文件或移动文件到另一个路径。注意: 此方法的行为与平台相关,且不是原子操作,使用时需谨慎。

4. 目录操作方法
这些方法用于创建、列出和遍历目录。
方法签名	|功能描述
boolean mkdir()							|创建单级目录。要求父目录必须存在,否则创建失败。
boolean mkdirs()						|创建多级目录。即使父目录不存在,也会一并创建,这是最常用的方法。
String[] list()							|返回一个字符串数组,包含该目录下的所有文件和子目录的名称。如果 File 对象不是目录,则返回 null。
File[] listFiles()						|返回一个 File 对象数组,包含该目录下的所有文件和子目录的 File 对象。
String[] list(FilenameFilter filter)	|使用文件名过滤器,返回满足过滤条件的文件和子目录名称数组。
File[] listFiles(FileFilter filter)		|使用文件过滤器,返回满足过滤条件的 File 对象数组。
File[] listFiles(FilenameFilter filter)	|使用文件名过滤器,返回满足过滤条件的 File 对象数组。

5. 路径获取方法
这些方法用于获取文件或目录的路径信息。

方法签名					|功能描述
String getPath()			|返回构造 File 对象时传入的路径字符串(可能是相对或绝对路径)。
String getAbsolutePath()	|返回文件的绝对路径字符串。它不会解析符号链接或“.”、“..”等相对路径符号。
String getCanonicalPath()	|返回文件的规范路径字符串。它会解析符号链接和相对路径符号,得到系统唯一的、标准的路径形式。
File getAbsoluteFile()		|返回此抽象路径名的绝对路径名形式的新 File 对象。
File getCanonicalFile()		|返回此抽象路径名的规范路径名形式的新 File 对象。
String getParent()			|返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。
File getParentFile()		|返回此抽象路径名父目录的 File 对象。

6. 权限检查与设置方法
这些方法用于检查和设置文件的读写执行权限。

方法签名	功能描述
boolean canRead()						|检查应用程序是否可以读取此文件。
boolean canWrite()						|检查应用程序是否可以修改此文件。
boolean canExecute()					|检查应用程序是否可以执行此文件。
boolean setReadable(boolean readable)	|设置此文件的读权限。
boolean setWritable(boolean writable)	|设置此文件的写权限。
boolean setExecutable(boolean executable)	|设置此文件的执行权限。
boolean setReadOnly()					|将此文件或目录标记为只读。

#完整代码示例
java
import java.io.File;
import java.io.IOException;

public class FileMethodsDemo {
    public static void main(String[] args) {
        // 1. 创建File对象(注意:这并不在磁盘上创建文件)
        File file = new File("test.txt");
        File dir = new File("my_directory");

        System.out.println("=== 文件检测方法 ===");
        System.out.println("文件是否存在: " + file.exists()); // false
        System.out.println("是文件吗: " + file.isFile()); // false
        System.out.println("是目录吗: " + file.isDirectory()); // false
        System.out.println("文件名: " + file.getName()); // "test.txt"
        
        try {
            // 2. 创建文件
            boolean created = file.createNewFile();
            System.out.println("文件创建成功: " + created);

            // 3. 创建目录
            boolean dirCreated = dir.mkdir();
            System.out.println("目录创建成功: " + dirCreated);

            System.out.println("\n=== 创建后再次检测 ===");
            System.out.println("文件是否存在: " + file.exists()); // true
            System.out.println("是文件吗: " + file.isFile()); // true
            System.out.println("文件大小: " + file.length() + " bytes"); // 0

            // 4. 路径信息
            System.out.println("\n=== 路径信息 ===");
            System.out.println("相对路径: " + file.getPath());
            System.out.println("绝对路径: " + file.getAbsolutePath());
            System.out.println("规范路径: " + file.getCanonicalPath());
            System.out.println("父目录: " + file.getParent());

            // 5. 权限信息
            System.out.println("\n=== 权限信息 ===");
            System.out.println("可读: " + file.canRead());
            System.out.println("可写: " + file.canWrite());
            System.out.println("可执行: " + file.canExecute());

            // 6. 列出文件系统根目录(静态方法)
            System.out.println("\n=== 文件系统根目录 ===");
            File[] roots = File.listRoots();
            for (File root : roots) {
                System.out.println("根目录: " + root);
            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 7. 清理:删除创建的文件和目录
            if (file.exists()) {
                file.delete();
            }
            if (dir.exists()) {
                dir.delete();
            }
        }
    }
}

#重要注意事项
路径分隔符:使用 File.separator 或 File.separatorChar 来保证跨平台兼容性,而不是直接使用 / 或 \。
list() 和 listFiles():在调用前,务必先用 isDirectory() 检查对象是否为目录,否则可能返回 null。
renameTo() 的局限性:该方法可能无法在不同磁盘或文件系统之间工作,且不是原子操作。对于复杂的文件操作,建议使用 Java NIO.2 的 Files.move()。
过时方法:在较早的 Java 版本中,File 类还有一些方法(如 toURL()),现在推荐使用 toURI() 并结合 URI 类来处理。
虽然 java.io.File 是传统的文件操作类,但在新的项目中,更推荐使用 Java 7 引入的 java.nio.file 包(特别是 Paths 和 Files 类),
它提供了更强大、更一致且更安全的文件操作 API。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐