Java中修改文件最后修改时间推荐使用Files.setLastModifiedTime()(支持纳秒精度、异常明确),也可用File.setLastModified()(仅毫秒级、失败返回false);需确保文件存在、有写权限,时间戳为非负毫秒值且按UTC解释。

Java 中修改文件的最后修改时间(Last Modified Time),主要通过 File.setLastModified(long time) 方法或更现代的 Files.setLastModifiedTime()(推荐,支持纳秒精度且与 NIO.2 一致)实现。关键在于传入一个有效的毫秒级时间戳(自 1970-01-01 00:00:00 UTC 起的毫秒数)。
使用 File.setLastModified()(兼容旧版,简单直接)
适用于基础场景,但仅支持毫秒级精度,且不抛出检查异常(失败只返回 false):
- 调用前需确保文件存在且具有写权限,否则返回
false - 时间参数必须是非负 long 值,建议用
System.currentTimeMillis()或new Date().getTime() - 示例:
File file = new File("example.txt");
boolean success = file.setLastModified(System.currentTimeMillis());
if (!success) { /* 修改失败,可能因权限或路径问题 */ }
使用 Files.setLastModifiedTime()(推荐,NIO.2 标准方式)
基于 Path 和 FileTime,支持纳秒精度,异常明确(如 IOException、SecurityException):
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 需要将
long毫秒值转为FileTime:用FileTime.fromMillis(time) - 也可设置任意时间,比如 2025 年 1 月 1 日 10:30:00:
FileTime ft = FileTime.from(Instant.parse("2025-01-01T10:30:00Z")); - 示例:
Path path = Paths.get("example.txt");
Files.setLastModifiedTime(path, FileTime.fromMillis(System.currentTimeMillis()));
注意事项和常见问题
实际操作中容易忽略的细节:
立即学习“Java免费学习笔记(深入)”;
- 文件系统限制:某些文件系统(如 FAT32)只保留 2 秒精度,NTFS/macOS APFS 支持更高精度
- 时区无关:所有时间均按 UTC 解释,无需手动处理本地时区
- 权限问题:在 Linux/macOS 上需有文件所在目录的写权限;Windows 一般只要文件可写即可
-
符号链接:默认操作的是链接本身(不是目标文件),如需操作目标,加
LinkOption.NOFOLLOW_LINKS
验证修改是否成功
修改后可通过以下方式确认:
-
file.lastModified()(File 方式) -
Files.getLastModifiedTime(path)(NIO.2 方式),返回FileTime,可用.toMillis()或.toString()查看 - 命令行验证(Linux/macOS):
stat -c "%y" example.txt;Windows:dir example.txt

















