文件属性:大小/权限/修改时间
这一节讲清楚如何获取和修改文件元信息。
File 获取属性
java
File f = new File("test.txt");
f.exists(); // 是否存在
f.isFile(); // 是否是普通文件
f.isDirectory(); // 是否是目录
f.length(); // 文件大小(字节)
f.lastModified(); // 最后修改时间(毫秒)
new Date(f.lastModified()); // 转换日期
f.canRead(); // 是否可读
f.canWrite(); // 是否可写
f.canExecute(); // 是否可执行
f.isHidden(); // 是否隐藏Files 获取属性
java
Path p = Path.of("test.txt");
// 基本属性
Files.exists(p);
Files.isRegularFile(p);
Files.isDirectory(p);
Files.isSymbolicLink(p);
Files.size(p); // 文件大小
Files.getLastModifiedTime(p); // BasicFileAttributeView
Files.getCreationTime(p); // 创建时间
Files.isReadable(p);
Files.isWritable(p);
Files.isExecutable(p);批量读取属性
java
// BasicFileAttributes(JDK 7+)
BasicFileAttributes attrs = Files.readAttributes(p, BasicFileAttributes.class);
attrs.size(); // 大小
attrs.creationTime(); // 创建时间
attrs.lastModifiedTime(); // 修改时间
attrs.lastAccessTime(); // 访问时间
attrs.isDirectory(); // 是否目录
attrs.isRegularFile(); // 是否普通文件
attrs.isSymbolicLink(); // 是否符号链接
// DosFileAttributes(支持 DOS 属性)
DosFileAttributes dos = Files.readAttributes(p, DosFileAttributes.class);
dos.isReadOnly();
dos.isHidden();
dos.isSystem();
// PosixFileAttributes(支持 POSIX 权限,Unix/Linux)
PosixFileAttributes posix = Files.readAttributes(p, PosixFileAttributes.class);
posix.owner(); // 文件所有者
posix.group(); // 文件所属组
posix.permissions(); // 权限位设置属性
java
Path p = Path.of("test.txt");
// 设置修改时间
Files.setLastModifiedTime(p, FileTime.fromMillis(System.currentTimeMillis()));
// 设置 DOS 属性(Windows)
Files.setAttribute(p, "dos:hidden", true);
Files.setAttribute(p, "dos:readonly", true);
// POSIX 权限(Unix/Linux)
Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rw-r--r--");
Files.setPosixFilePermissions(p, perms);
// 快捷方式
Files.setAttribute(p, "unix:mode", 0644); // 直接设置权限位FileTime 时间处理
java
FileTime time = Files.getLastModifiedTime(p);
// 转换为各种格式
time.to(TimeUnit.MILLISECONDS); // 毫秒
time.toInstant(); // Instant
Instant instant = time.toInstant();
LocalDateTime ldt = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());权限管理
java
// Unix 权限位
Path p = Path.of("script.sh");
// 读取
Set<PosixFilePermission> perms = Files.getPosixFilePermissions(p);
System.out.println(PosixFilePermissions.toString(perms)); // "rw-r--r--"
// 设置
Set<PosixFilePermission> newPerms =
PosixFilePermissions.fromString("rwxr-xr-x");
Files.setPosixFilePermissions(p, newPerms);
// 快捷方式
Files.setAttribute(p, "unix:mode", 0755);选型建议
┌─────────────────────────────────────────────────────────────────┐
│ 获取属性: │
│ • 单个属性 → Files.size() / Files.exists() 等快捷方法 │
│ • 多个属性 → Files.readAttributes() 批量读取 │
│ │
│ 设置属性: │
│ • 时间 → Files.setLastModifiedTime() │
│ • 权限 → Files.setPosixFilePermissions()(Unix/Linux) │
│ • DOS → Files.setAttribute()(Windows) │
└─────────────────────────────────────────────────────────────────┘