Java中可用Files.setLastModifiedTime()修改文件最后修改时间,需传入Path和FileTime对象,支持纳秒精度且跨平台;旧版JDK可用File.setLastModified(long)但精度低、不抛异常。

Java 中可以通过 Files.setLastModifiedTime() 方法修改文件的最后修改时间,前提是操作系统和文件系统支持该操作(如 NTFS、ext4 等主流文件系统均支持)。
使用 Files.setLastModifiedTime() 修改时间
这是 Java 7 引入的推荐方式,基于 NIO.2 API,简洁且跨平台性好:
- 需要传入一个
Path对象和一个FileTime对象 -
FileTime可通过FileTime.from(Instant)或FileTime.fromMillis(long)构造 - 操作可能抛出
IOException(如权限不足、文件不存在、只读文件等),需捕获处理
示例代码:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.FileTime;
import java.time.Instant;
public class FileTimeExample {
public static void main(String[] args) {
Path file = Paths.get("example.txt");
try {
// 设置为当前时间
FileTime now = FileTime.from(Instant.now());
Files.setLastModifiedTime(file, now);
// 或设为指定毫秒时间戳(如 2020-01-01 00:00:00 UTC)
// FileTime custom = FileTime.fromMillis(1577836800000L);
// Files.setLastModifiedTime(file, custom);
System.out.println("最后修改时间已更新");
} catch (IOException e) {
System.err.println("修改失败:" + e.getMessage());
}
}
}
注意文件权限与只读属性
即使代码逻辑正确,也可能因以下原因失败:
立即学习“Java免费学习笔记(深入)”;
- 目标文件所在目录或文件本身没有写权限(Linux/macOS 需对父目录有写权限;Windows 下需有“修改”权限)
- 文件被标记为只读(可通过
Files.setAttribute(file, "dos:readonly", false)尝试清除 Windows 的只读属性) - 文件正被其他进程独占打开(如记事本、IDE 正在编辑)
兼容旧版 JDK(Java 6 及以前)
若必须用老版本 JDK,可借助 File.setLastModified(long):
- 参数是自 1970-01-01 00:00:00 UTC 起的毫秒数(
long类型) - 返回
boolean表示是否成功(不抛异常,需主动检查返回值) - 功能较弱,无法设置纳秒精度,也不支持某些特殊文件系统语义
示例:
File file = new File("example.txt");
long newTime = System.currentTimeMillis();
if (!file.setLastModified(newTime)) {
System.err.println("设置最后修改时间失败(权限/路径/只读等原因)");
}
验证修改是否生效
修改后可用 Files.getLastModifiedTime() 或 file.lastModified() 读取确认:
try {
FileTime time = Files.getLastModifiedTime(file);
System.out.println("当前最后修改时间:" + time);
} catch (IOException e) {
e.printStackTrace();
}
注意:部分文件系统(如 FAT32)时间精度仅到 2 秒,显示可能有舍入误差。


















