You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java如何获取目录下最新创建(非最后修改)的文件夹名称/路径

Java获取指定目录下最后创建(非最后修改)的文件夹路径/名称

实现前提

  • 要求JDK版本为7及以上,低版本(JDK6及更早)无原生API支持直接读取文件创建时间,只能通过调用系统命令解析输出,兼容性极差,不推荐使用
  • 运行环境的文件系统需要支持记录文件创建时间:Windows NTFS、macOS APFS/HFS+、Linux ext4/btrfs/xfs等主流现代文件系统均满足要求;ext3等老旧文件系统不记录创建时间时,接口会回退返回最后修改时间,结果不符合需求
  • 禁止使用File.lastModified()方法,该方法返回的是文件夹最后修改时间,和创建时间完全无关,无法满足需求

可直接复用的实现代码

import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.Comparator;
import java.util.Optional;
import java.util.stream.Stream;

public class LastCreatedDirectoryFinder {

    /**
     * 查询目标目录下最后创建的子文件夹
     * @param targetPath 要查询的目标目录路径
     * @return 最后创建的文件夹路径对象,目标目录无有效子文件夹时返回空Optional
     * @throws IOException 目录不存在、无读取权限等IO异常
     */
    public static Optional<Path> getLastCreatedSubDir(String targetPath) throws IOException {
        Path dir = Paths.get(targetPath);
        // 先校验传入路径是有效存在的目录
        if (!Files.isDirectory(dir)) {
            throw new IllegalArgumentException("传入路径不是有效可访问目录: " + targetPath);
        }

        // try-with-resources自动关闭目录流,避免文件句柄泄漏
        try (Stream<Path> subPathStream = Files.list(dir)) {
            return subPathStream
                    // 第一次过滤:只保留子目录,排除普通文件
                    .filter(Files::isDirectory)
                    // 第二次过滤:排除符号链接指向的目录,不需要可以删掉这一段
                    .filter(path -> {
                        try {
                            return !Files.isSymbolicLink(path);
                        } catch (IOException e) {
                            throw new RuntimeException("路径属性读取失败: " + path, e);
                        }
                    })
                    // 按创建时间倒序取最大值,即为最后创建的文件夹
                    .max(Comparator.comparingLong(path -> {
                        try {
                            BasicFileAttributes attr = Files.readAttributes(path, BasicFileAttributes.class);
                            return attr.creationTime().toMillis();
                        } catch (IOException e) {
                            throw new RuntimeException("文件夹创建时间读取失败: " + path, e);
                        }
                    }));
        }
    }

    // 调用示例
    public static void main(String[] args) throws IOException {
        Optional<Path> lastCreatedDir = getLastCreatedSubDir("D:\\your-target-directory");
        if (lastCreatedDir.isPresent()) {
            Path dir = lastCreatedDir.get();
            System.out.println("最后创建的文件夹名:" + dir.getFileName());
            System.out.println("最后创建的文件夹完整路径:" + dir.toAbsolutePath());
        } else {
            System.out.println("目标目录下没有符合条件的子文件夹");
        }
    }
}

调整说明

  • 如果需要把符号链接指向的文件夹也纳入统计,直接删除代码中第二次filter的逻辑块即可
  • 如果需要递归查询所有层级子目录里最后创建的文件夹,把Files.list(dir)换成Files.walk(dir)即可,注意Files.walk默认会递归遍历所有子层级,可传入深度参数控制遍历深度
  • 返回的Path对象可以直接通过getFileName()获取文件夹名称,toAbsolutePath()获取完整绝对路径,不需要额外做字符串拼接

内容的提问来源于stack exchange,提问作者ariana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 21:06:21