java中获取文件属性主要通过files.readattributes()和files.getattribute()方法,配合basicfileattributes(跨平台)、posixfileattributes(linux/macos)或dosfileattributes(windows)等接口实现。

Java 中获取文件详细属性主要通过 java.nio.file.attribute 包中的类实现,核心是 Files.readAttributes() 和 Files.getAttribute() 方法,配合 BasicFileAttributes、PosixFileAttributes(Linux/macOS)或 DosFileAttributes(Windows)等接口。
使用 Files.readAttributes 获取基础属性
这是最常用的方式,一次性读取一组标准属性:
- BasicFileAttributes 提供跨平台通用信息:创建时间、最后修改时间、最后访问时间、是否为目录/常规文件、大小、是否为符号链接等
- 代码示例:
Path path = Paths.get("example.txt");
try {
BasicFileAttributes attrs = Files.readAttributes(path, BasicFileAttributes.class);
System.out.println("大小: " + attrs.size() + " 字节");
System.out.println("是否为目录: " + attrs.isDirectory());
System.out.println("最后修改时间: " + attrs.lastModifiedTime());
System.out.println("创建时间: " + attrs.creationTime());
System.out.println("最后访问时间: " + attrs.lastAccessTime());
} catch (IOException e) {
e.printStackTrace();
}
获取操作系统特有属性(POSIX 或 DOS)
若需权限、所有者、群组等扩展信息,需根据系统选择对应属性类型:
- Linux/macOS 下用 PosixFileAttributes(需文件系统支持 POSIX):
- Windows 下用 DosFileAttributes(含隐藏、只读、系统、存档等标志)
// Linux/macOS 示例
PosixFileAttributes posixAttrs = Files.readAttributes(path, PosixFileAttributes.class);
System.out.println("权限: " + posixAttrs.permissions());
System.out.println("所有者: " + posixAttrs.owner());
System.out.println("群组: " + posixAttrs.group());
// Windows 示例
DosFileAttributes dosAttrs = Files.readAttributes(path, DosFileAttributes.class);
System.out.println("是否隐藏: " + dosAttrs.isHidden());
System.out.println("是否只读: " + dosAttrs.isReadOnly());
按需读取单个属性(轻量级场景)
如果只需某一个属性(如仅查文件大小),可用 Files.getAttribute() 避免加载全部属性:
- 属性名格式为
"basic:size"、"basic:lastModifiedTime"、"dos:hidden"等 - 返回值为
Object,需按需强转(如FileTime或Long)
try {
Long size = (Long) Files.getAttribute(path, "basic:size");
FileTime mtime = (FileTime) Files.getAttribute(path, "basic:lastModifiedTime");
System.out.println("大小: " + size + ", 修改时间: " + mtime);
} catch (IOException e) {
e.printStackTrace();
}
注意点与兼容性提醒
实际使用时需留意以下细节:
- 路径必须存在且可访问,否则抛
NoSuchFileException或SecurityException - POSIX 属性在 Windows 上可能不可用(除非使用 WSL 或支持 POSIX 的文件系统)
- 某些属性(如创建时间)在部分 Linux 文件系统中不被原生支持,可能返回 1970-01-01 或抛
UnsupportedOperationException - 推荐优先使用
BasicFileAttributes保证跨平台稳定性,再按需补充系统特定属性
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











