java中获取文件属性推荐使用java.nio.file.files.readattributes(path, basicfileattributes.class),可一次性读取size()和lastmodifiedtime()等元数据;files.size()和files.getlastmodifiedtime()适合单属性快速查询;filetime需转instant再用datetimeformatter格式化;file类方法已过时,功能受限且不跨平台。

Java 中获取文件属性(如大小、修改时间等)主要通过 java.nio.file 包中的 Files 和 BasicFileAttributes 类,比旧的 File 类更可靠、功能更全,尤其在处理符号链接、跨平台属性时优势明显。
用 Files.readAttributes 获取基础属性
这是推荐方式,能一次性读取多个属性,避免多次系统调用:
- 使用
Files.readAttributes(path, BasicFileAttributes.class)获取标准文件元数据 -
size()返回字节数(long类型),适用于普通文件;对目录或特殊文件可能返回 0 或抛异常 -
lastModifiedTime()返回FileTime对象,可转为毫秒或格式化输出
示例:
Path path = Paths.get("example.txt");
try {
BasicFileAttributes attrs = Files.readAttributes(path, BasicFileAttributes.class);
System.out.println("大小: " + attrs.size() + " 字节");
System.out.println("最后修改时间: " + attrs.lastModifiedTime());
} catch (IOException e) {
e.printStackTrace();
}
用 Files.size 和 Files.getLastModifiedTime 快速单查
适合只查一两个属性的简单场景,写法更简洁:
-
Files.size(path)直接返回大小(单位:字节),对目录会抛IOException -
Files.getLastModifiedTime(path)返回FileTime,支持指定是否跟随符号链接(通过LinkOption.NOFOLLOW_LINKS)
注意:每次调用都是一次独立系统访问,频繁读多个属性时不建议连用。
把 FileTime 转成易读的时间格式
FileTime 默认是纳秒精度的纪元时间,需手动转换:
- 用
.toMillis()得到毫秒值,再传给new Date(...)或Instant.ofEpochMilli(...) - 推荐用
DateTimeFormatter格式化(Java 8+):
FileTime mtime = Files.getLastModifiedTime(path);
Instant instant = mtime.toInstant();
String formatted = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
.format(instant);
System.out.println("格式化时间: " + formatted);
兼容旧代码:File 类也能用但有限制
如果还在用 java.io.File,可用以下方法:
-
file.length()→ 大小(字节),对目录返回 0 -
file.lastModified()→ 毫秒时间戳(自 1970-01-01)
缺点:不支持符号链接控制、无法获取创建时间(Windows)、部分属性不可靠(如 NFS 文件系统),且已标记为 legacy。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











