在 Linux 下使用 Java 设置文件/目录权限,常见有 三种方式,取决于你使用的 Java 版本和需求。
Files.setPosixFilePermissions适用于 Linux / Unix 系统(需要支持 POSIX)。
import java.nio.file.*;
import java.nio.file.attribute.*;
import java.util.Set;
public class ChmodExample {
public static void main(String[] args) throws Exception {
Path path = Paths.get("/opt/app/test.sh");
Set<PosixFilePermission> perms = Set.of(
PosixFilePermission.OWNER_READ,
PosixFilePermission.OWNER_WRITE,
PosixFilePermission.OWNER_EXECUTE,
PosixFilePermission.GROUP_READ,
PosixFilePermission.GROUP_EXECUTE,
PosixFilePermission.OTHERS_READ,
PosixFilePermission.OTHERS_EXECUTE
);
Files.setPosixFilePermissions(path, perms);
}
}
| 权限 | 含义 |
|---|---|
| 644 | rw-r–r– |
| 755 | rwxr-xr-x |
| 600 | rw------- |
chmod 命令适合 老版本 Java 或快速实现。
Runtime.getRuntime().exec("chmod 755 /opt/app/test.sh");
或更推荐:
new ProcessBuilder("chmod", "755", "/opt/app/test.sh").start();
⚠ 注意:
只能设置 只读 / 可写,不能设置执行权限:
file.setReadable(true);
file.setWritable(true);
file.setExecutable(true);
❌ 不支持 755 / 644 等完整权限
UserPrincipal owner = Files.getFileAttributeView(
path, UserPrincipalLookupService.class)
.lookupPrincipalByName("appuser");
Files.setOwner(path, owner);
setPosixFilePermissions 会抛异常Files.exists(path) 判断✅ Linux + Java 7+:用 Files.setPosixFilePermissions
✅ 简单脚本场景:ProcessBuilder 调 chmod
❌ 不要用 File.setExecutable 做精确权限控制
如果你有 具体场景(如 Spring Boot、Shell 脚本、Docker),可以告诉我,我给你更贴合的示例。