Skip to content

文件属性:大小/权限/修改时间

这一节讲清楚如何获取和修改文件元信息。

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)                          │
└─────────────────────────────────────────────────────────────────┘

基于 VitePress 构建