Java中读取文件时间属性之创建时间、修改时间、访问时间的跨平台实现

 更新时间:2025年08月20日 08:27:10   作者:三石成山  
在工作时候我们有时候需要获取到文件的最后更新时间,根据最近更新时间,来处理其他业务,这篇文章主要介绍了Java中读取文件时间属性之创建时间、修改时间、访问时间的跨平台实现,需要的朋友可以参考下

1. 引言

在文件管理、备份同步或日志分析等场景中,准确获取文件的 创建时间(Creation Time)、修改时间(Last Modified Time)、访问时间(Last Access Time) 是常见需求。

Java 提供了多种方式读取这些时间属性,但不同方法的 精度、跨平台兼容性 差异显著。本文对比传统 File 类与现代 BasicFileAttributes 的优劣,并给出跨平台解决方案。

2. 传统方法:File.lastModified()的局限性

2.1 方法说明

File file = new File("test.txt");
long lastModified = file.lastModified(); // 返回毫秒时间戳

2.2 局限性

问题说明
仅支持修改时间无法获取创建时间、访问时间。
精度问题某些文件系统(如 FAT32)仅记录到秒级,毫秒部分为 0
平台不一致性在 Linux 上,lastModified() 可能返回 inode 变更时间而非内容修改时间。
性能开销每次调用触发系统调用,高频操作时效率低。

3. 现代方法:BasicFileAttributes(NIO.2)

Java 7 引入的 NIO.2(java.nio.file)通过 BasicFileAttributes 提供更全面的时间属性支持。

3.1 核心方法

方法返回类型说明
creationTime()FileTime文件创建时间(可能不可用)。
lastModifiedTime()FileTime最后修改时间。
lastAccessTime()FileTime最后访问时间。

3.2 跨平台行为差异

操作系统文件系统creationTime() 支持注意事项
WindowsNTFS✅ 精确到纳秒FAT32 不支持创建时间。
Linuxext4/xfs⚠️ 可能返回 lastModifiedTime依赖文件系统是否记录 inode 创建时间。
macOSAPFS✅ 精确到纳秒HFS+ 可能仅支持秒级精度。

3.3 代码示例

import java.nio.file.*;
import java.nio.file.attribute.*;

public class FileTimeReader {
    public static void printFileTimes(String filePath) throws IOException {
        Path path = Paths.get(filePath);
        BasicFileAttributes attrs = Files.readAttributes(
            path, BasicFileAttributes.class);

        System.out.println("创建时间: " + attrs.creationTime());
        System.out.println("修改时间: " + attrs.lastModifiedTime());
        System.out.println("访问时间: " + attrs.lastAccessTime());
    }

    public static void main(String[] args) throws IOException {
        printFileTimes("test.txt");
    }
}

输出示例(Linux ext4):

创建时间: 2023-05-20T10:15:30Z
修改时间: 2023-05-21T14:20:45Z
访问时间: 2023-05-22T09:10:12Z

4. 扩展:不同文件系统的特殊处理

4.1 Windows(NTFS/FAT32)

  • NTFS

    • 完整支持三个时间,精度为 100 纳秒。

    • 通过 DosFileAttributes 可检查隐藏/只读属性。

  • FAT32

    • creationTime() 通常返回 null

    • 时间精度仅到秒级。

4.2 Linux/Unix(ext4/xfs)

  • ext4

    • creationTime() 可能返回 inode 创建时间(需内核 >= 4.1)。

    • 默认不记录访问时间(需挂载时启用 relatime 或 strictatime)。

  • 网络文件系统(NFS)

    • 时间属性依赖服务端实现,可能不一致。

4.3 macOS(APFS/HFS+)

  • APFS

    • 完整支持三个时间,纳秒级精度。

  • HFS+

    • creationTime() 可能不可靠。

5. 最佳实践与注意事项

  1. 优先使用 BasicFileAttributes

    • 避免遗留 File 类,因其功能有限。

  2. 处理 creationTime() 为 null 的情况

    FileTime creationTime = attrs.creationTime();
    if (creationTime == null) {
        creationTime = attrs.lastModifiedTime(); // 降级方案
    }
  3. 时间精度转换

    long millis = creationTime.toMillis(); // 转为毫秒
    Instant instant = creationTime.toInstant(); // 转为 Instant
  4. 性能优化

    • 批量处理文件时,复用 BasicFileAttributes 对象。

6. 总结

需求推荐方法跨平台建议
仅需修改时间File.lastModified()简单但功能有限。
需要三个时间BasicFileAttributes首选,注意 creationTime() 兼容性。
高精度时间结合 FileTime 和 Instant处理纳秒级数据。

最终建议

  • 在跨平台应用中,始终检查 creationTime() 的返回值是否为 null

  • 对时间敏感的场景(如备份工具),优先测试目标文件系统的支持情况。

通过 BasicFileAttributes,开发者可以更可靠地获取文件时间属性,同时规避传统 File 类的局限性。

到此这篇关于Java中读取文件时间属性之创建时间、修改时间、访问时间跨平台实现的文章就介绍到这了,更多相关Java中读取文件时间属性内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 解读Spring事务是如何实现的

    解读Spring事务是如何实现的

    这篇文章主要介绍了Spring事务是如何实现的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • java 面向对象面试集锦

    java 面向对象面试集锦

    这篇文章主要介绍了java 面向对象面试集锦的相关资料,这里整理了面向对象的基础知识,帮助大家学习理解此部分的知识,需要的朋友可以参考下
    2016-11-11
  • IDEA新手必备之各种快捷键详解

    IDEA新手必备之各种快捷键详解

    这篇文章主要介绍了IDEA新手必备之各种快捷键详解,文中有非常详细的快捷键介绍,对正在使用IDEA的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • Spring+SpringMVC+Hibernate项目环境搭建的步骤(图文)

    Spring+SpringMVC+Hibernate项目环境搭建的步骤(图文)

    这篇文章主要介绍了Spring+SpringMVC+Hibernate项目环境搭建的步骤(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • 基于JavaMail的Java实现复杂邮件发送功能

    基于JavaMail的Java实现复杂邮件发送功能

    这篇文章主要为大家详细介绍了基于JavaMail的Java实现复杂邮件发送功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-09-09
  • java正则表达式匹配规则超详细总结

    java正则表达式匹配规则超详细总结

    正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别,下面这篇文章主要给大家介绍了关于java正则表达式匹配规则的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-10-10
  • SpringBoot Knife4j框架&Knife4j的显示内容的配置方式

    SpringBoot Knife4j框架&Knife4j的显示内容的配置方式

    Knife4j框架是基于Swagger2开发的在线API文档生成工具,主要功能包括自动生成API文档、接口文档展示、接口测试工具、接口权限控制和在线调试,该框架支持通过注解自动生成详细的接口文档,开发者可以直接在文档界面进行接口测试和调试
    2024-09-09
  • Spring Boot 数据缓存与性能优化实战指南

    Spring Boot 数据缓存与性能优化实战指南

    本文主要介绍了SpringBoot数据缓存与性能优化的相关内容,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2026-04-04
  • Spring Security常用过滤器实例解析

    Spring Security常用过滤器实例解析

    这篇文章主要介绍了Spring Security常用过滤器实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • 老生常谈java垃圾回收算法(必看篇)

    老生常谈java垃圾回收算法(必看篇)

    下面小编就为大家带来一篇老生常谈java垃圾回收算法(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05

最新评论