Java File 类详解

发布于:2025-04-21 ⋅ 阅读:(112) ⋅ 点赞:(0)

Java File 类详解

File 类是 Java 中用于表示文件和目录路径名的抽象类,位于 java.io 包中。它提供了丰富的 API,用于操作文件系统,包括创建、删除、重命名、查询文件属性等功能。


1. File 类核心知识点

(1)构造方法

File 类提供了多种构造方法,用于表示文件或目录路径:

java

// 1. 通过路径字符串创建
File file1 = new File("C:/test/file.txt");

// 2. 通过父路径 + 子路径创建
File file2 = new File("C:/test", "file.txt");

// 3. 通过父 File 对象 + 子路径创建
File parentDir = new File("C:/test");
File file3 = new File(parentDir, "file.txt");

(2)路径表示方式

  • 绝对路径:完整路径(如 C:/test/file.txt)。

  • 相对路径:相对于当前工作目录(如 ./file.txt)。

  • 路径分隔符

    • Windows:\(需转义为 \\)或 /

    • Linux/Mac:/(推荐使用 /,Java 会自动适配)。


2. 核心方法

(1)文件/目录基本操作

方法 说明
boolean createNewFile() 创建新文件(仅当文件不存在时)
boolean mkdir() 创建单级目录
boolean mkdirs() 创建多级目录
boolean delete() 删除文件或空目录
boolean renameTo(File dest) 重命名或移动文件

示例

java

File file = new File("test.txt");
if (!file.exists()) {
    file.createNewFile();  // 创建文件
}

File dir = new File("mydir");
dir.mkdir();  // 创建目录

(2)文件属性查询

方法 说明
boolean exists() 判断文件/目录是否存在
boolean isFile() 判断是否是文件
boolean isDirectory() 判断是否是目录
long length() 获取文件大小(字节)
long lastModified() 获取最后修改时间(毫秒时间戳)
String getName() 获取文件名
String getPath() 获取相对路径
String getAbsolutePath() 获取绝对路径

示例

java

File file = new File("test.txt");
System.out.println("文件大小:" + file.length() + " bytes");
System.out.println("最后修改时间:" + new Date(file.lastModified()));

(3)目录遍历

方法 说明
String[] list() 返回目录下的文件名数组
File[] listFiles() 返回目录下的 File 对象数组
File[] listFiles(FileFilter filter) 过滤符合条件的文件

示例

java

File dir = new File("C:/test");
// 遍历所有文件
for (File file : dir.listFiles()) {
    System.out.println(file.getName());
}

// 仅遍历 .txt 文件
File[] txtFiles = dir.listFiles((file) -> file.getName().endsWith(".txt"));

3. 关键问题与解决方案

(1)路径问题

  • 问题:Windows 和 Linux 路径分隔符不同。

  • 解决:使用 File.separator(跨平台兼容):

    java

    String path = "data" + File.separator + "file.txt";
    File file = new File(path);

(2)文件删除失败

  • 原因

    • 文件被占用(如未关闭 InputStream)。

    • 目录非空(delete() 只能删空目录)。

  • 解决

    java

    // 递归删除非空目录
    public static void deleteDir(File dir) {
        if (dir.isDirectory()) {
            for (File file : dir.listFiles()) {
                deleteDir(file);
            }
        }
        dir.delete();
    }

(3)文件权限问题

  • 检查权限

    java

    File file = new File("test.txt");
    System.out.println("可读:" + file.canRead());
    System.out.println("可写:" + file.canWrite());
    System.out.println("可执行:" + file.canExecute());

4. 对比 File 与 Path(NIO.2)

特性 File(传统 IO) Path(NIO.2)
所属包 java.io java.nio.file
功能 基础文件操作 更强大(符号链接、文件属性)
性能 较低 更高
推荐场景 旧代码兼容 新项目优先使用

示例(NIO.2 替代方案)

java

Path path = Paths.get("test.txt");
Files.createFile(path);  // 创建文件
Files.delete(path);     // 删除文件

5. 记忆技巧

(1)核心方法分类

文件操作:createNewFile(), delete(), renameTo()
目录操作:mkdir(), mkdirs(), listFiles()
属性查询:exists(), isFile(), length()

(2)常见操作流程

"先查 exists(),再判 isFile()
创建用 createNewFile(),删除要 delete()
目录遍历 listFiles(),递归删除要记牢!"


6. 面试常见问题

  1. File 类能直接读写文件内容吗?

    • 不能,它只操作元数据,需配合 FileInputStream/FileWriter

  2. 如何递归遍历目录?

    • 用 listFiles() + 递归(见上文示例)。

  3. mkdir() 和 mkdirs() 的区别?

    • mkdir() 只能创建单级目录,mkdirs() 可创建多级。


7. 实战应用

  • 文件管理工具:批量重命名、删除过期文件。

  • 日志清理:定期删除旧日志文件。

  • 配置文件读取:检查文件是否存在后加载。

练习

  1. 写一个程序,统计某个目录下所有 .java 文件的总行数。

  2. 实现一个递归复制目录的功能(使用 File 或 NIO.2)。


网站公告

今日签到

点亮在社区的每一天
去签到