Files.getAttribute()可获取单个文件属性:size属basic视图,返回long字节值;creationTime也属basic视图但Linux常不支持,返回FileTime需转换;注意attribute name拼写、权限及异常处理。

直接用 Files.getAttribute() 获取单个文件属性,比如大小(size)或创建时间(creationTime),关键在于指定正确的 attribute name 和 view type,并注意平台兼容性。
获取文件大小(size)
大小属于 basic 视图的属性,无需额外权限,跨平台支持好:
- attribute name 是
"size"(字符串字面量,不是常量) - 返回值类型是
long,单位为字节 - 推荐使用泛型重载避免强制类型转换
示例代码:
Path path = Paths.get("example.txt");
long size = (long) Files.getAttribute(path, "size"); // 非泛型,需转型
// 或更安全的写法:
long size = Files.getAttribute(path, "size", LinkOption.NOFOLLOW_LINKS); // 返回 long
获取创建时间(creationTime)
创建时间也属于 basic 视图,但 Windows 和 macOS 支持较好,Linux(ext4 等)通常不保存该字段,可能返回默认值(如 1970-01-01):
- attribute name 是
"creationTime" - 返回值类型是
FileTime,需调用.toInstant()或.toMillis()转换 - 建议配合
LinkOption.NOFOLLOW_LINKS避免符号链接干扰
示例代码:
Path path = Paths.get("example.txt");
FileTime creationTime = (FileTime) Files.getAttribute(path, "creationTime");
Instant instant = creationTime.toInstant(); // 转为标准时间点
常见问题与注意事项
-
不要拼错 attribute name:如写成
"fileSize"或"created"会抛UnsupportedOperationException - 不支持复合路径操作:该方法只查单个文件,不能用于目录遍历或批量读取
-
权限与异常:若无读权限,抛
AccessDeniedException;路径不存在则抛NoSuchFileException -
替代方案参考:若只需大小,
Files.size(path)更简洁;若需最后修改时间,Files.getLastModifiedTime(path)更直观且兼容性更好

















