如何使用Java获取文件夹中最早创建文件及最后修改文件
实现方案
要获取文件夹内最早创建的文件日期,仅靠java.io.File的API无法实现,你需要使用JDK 7及以上版本内置的NIO.2文件接口,具体实现逻辑如下:
核心逻辑说明
- 遍历目标文件夹下的所有文件(可根据需求选择是否递归遍历子文件夹)
- 读取每个文件的基础属性,从中取出创建时间
- 对所有文件的创建时间做大小比较,取值最小的即为最早创建文件的日期
完整代码示例
import java.io.File; import java.nio.file.Files; import java.nio.file.attribute.BasicFileAttributes; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Objects; import java.util.Optional; public class FileTimeUtil { public static void main(String[] args) { // 目标文件夹路径,替换成你的实际路径 File directory = new File("/path/to/your/directory"); DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { Optional<Date> earliestCreateTime = Files.list(directory.toPath()) // 过滤掉子文件夹,只统计文件,需要统计子文件夹就去掉这行 .filter(Files::isRegularFile) .map(path -> { try { BasicFileAttributes attrs = Files.readAttributes(path, BasicFileAttributes.class); // 获取文件创建时间 return new Date(attrs.creationTime().toMillis()); } catch (Exception e) { e.printStackTrace(); return null; } }) .filter(Objects::nonNull) // 取最小的时间就是最早创建的 .min(Date::compareTo); if (earliestCreateTime.isPresent()) { System.out.println("文件夹内最早创建文件的日期:" + sdf.format(earliestCreateTime.get())); } else { System.out.println("文件夹内无有效文件"); } } catch (Exception e) { e.printStackTrace(); } // 原有获取文件夹最后修改时间的逻辑可以保留 long lastModifiedTime = directory.lastModified(); System.out.println("文件夹最后修改日期:" + sdf.format(new Date(lastModifiedTime))); } }
扩展说明
- 如果需要递归遍历所有子文件夹下的文件,把
Files.list(directory.toPath())替换为Files.walk(directory.toPath())即可 - 如果需要同时统计最早创建和最后修改的文件,可在遍历过程中同时记录两个时间值,避免重复遍历文件夹提升性能
SimpleDateFormat是线程不安全的,多线程场景下建议使用java.time.format.DateTimeFormatter替代
内容的提问来源于stack exchange,提问作者unanonymous56
相关产品推荐
相关产品推荐

