java中获取文件元数据主要通过files.readattributes()配合basicfileattributes(跨平台)或posixfileattributes(linux/macos)实现,可一次性读取创建时间、最后修改时间、大小、类型、权限、所有者等属性;file类功能受限,不推荐使用。

Java 中获取文件元数据(如创建时间、最后修改时间、大小、是否为目录/文件、权限、符号链接等)主要通过 java.nio.file 包中的 Files 和 BasicFileAttributes(以及子接口)来实现,而不是传统 File 类的有限方法。
使用 Files.readAttributes 获取基础属性
这是最常用、推荐的方式。它能一次性读取一组标准属性,性能好且支持跨平台语义:
- 调用
Files.readAttributes(path, BasicFileAttributes.class)可获取创建时间(creationTime())、最后访问时间(lastAccessTime())、最后修改时间(lastModifiedTime())、大小(size())、是否为目录或常规文件(isDirectory()/isRegularFile())等 - 注意:Windows 支持创建时间;Linux/macOS 通常不保存或无法可靠读取创建时间(
creationTime()可能返回 1970-01-01 或抛异常),但lastModifiedTime()和size()始终可用 - 示例代码片段:
Path path = Paths.get("example.txt"); try { BasicFileAttributes attrs = Files.readAttributes(path, BasicFileAttributes.class); System.out.println("大小: " + attrs.size() + " 字节"); System.out.println("最后修改: " + attrs.lastModifiedTime()); System.out.println("是否为文件: " + attrs.isRegularFile()); } catch (IOException e) { e.printStackTrace(); }
读取 POSIX 权限和所有者(仅限 Unix/Linux/macOS)
如果运行在支持 POSIX 的系统上,可获取更详细的元数据:
- 用
PosixFileAttributes替代BasicFileAttributes,可获得owner()、group()、permissions()(如OWNER_READ、GROUP_WRITE等) - 需确保文件系统挂载时支持 POSIX 属性(大多数本地文件系统默认支持)
- 示例:
if (FileSystems.getDefault().supportedFileAttributeViews().contains("posix")) { PosixFileAttributes posixAttrs = Files.readAttributes(path, PosixFileAttributes.class); System.out.println("所有者: " + posixAttrs.owner()); System.out.println("权限: " + posixAttrs.permissions()); }
检查符号链接与真实路径属性
默认 Files.readAttributes 会跟随符号链接(即返回目标文件的属性)。如需获取链接本身的信息:
- 传入
LinkOption.NOFOLLOW_LINKS参数,例如:Files.readAttributes(path, BasicFileAttributes.class, LinkOption.NOFOLLOW_LINKS) - 配合
Files.isSymbolicLink(path)判断是否为符号链接 - 用
Files.readSymbolicLink(path)获取链接指向的目标路径
避免使用旧版 File 类的局限方法
java.io.File 的 lastModified()、length()、isDirectory() 等方法只能提供极少量信息,且无法获取创建时间、权限、所有者等关键元数据,也不支持自定义属性视图。在新项目中应优先使用 NIO.2 API。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











