16

可能重复:
如何在 java 中设置 umask?

在 java 中创建文件对象时,如何将文件权限设置为 777(或任何其他任意权限)?

4

3 回答 3

27

Java SE 7 具有java.nio.file.attribute.PosixFileAttributes,它使您可以细粒度地控制所有者、组和其他人的读取、写入和执行权限。

import java.nio.file.*;
import java.nio.file.attribute.*;
import java.util.Set;

public class Test {
    public static void main(String[] args) throws Exception {
        Path path = Paths.get("/tmp/test-file.txt");
        if (!Files.exists(path)) Files.createFile(path);
        Set<PosixFilePermission> perms = Files.readAttributes(path,PosixFileAttributes.class).permissions();

        System.out.format("Permissions before: %s%n",  PosixFilePermissions.toString(perms));

        perms.add(PosixFilePermission.OWNER_WRITE);
        perms.add(PosixFilePermission.OWNER_READ);
        perms.add(PosixFilePermission.OWNER_EXECUTE);
        perms.add(PosixFilePermission.GROUP_WRITE);
        perms.add(PosixFilePermission.GROUP_READ);
        perms.add(PosixFilePermission.GROUP_EXECUTE);
        perms.add(PosixFilePermission.OTHERS_WRITE);
        perms.add(PosixFilePermission.OTHERS_READ);
        perms.add(PosixFilePermission.OTHERS_EXECUTE);
        Files.setPosixFilePermissions(path, perms);

        System.out.format("Permissions after:  %s%n",  PosixFilePermissions.toString(perms));
    }
}

然后可以像这样使用:

$ rm -f /tmp/test-file.txt && javac Test.java && java Test
Permissions before: rw-r--r--
Permissions after:  rwxrwxrwx
于 2011-06-03T23:29:15.353 回答
25

有 3 种方法可供选择:

setReadalble(boolean boolean)
setWritable(boolean,boolean)
setExecutable(boolean,boolean)

这会将文件设置为“0777”

String path = "SOME/PATH";

final File file = new File(path);
file.setReadable(true, false);
file.setExecutable(true, false);
file.setWritable(true, false);
于 2011-06-03T23:23:52.733 回答
17

如果您在启动 JVM 之前将其设置为umask(2)0则创建的所有文件和目录都将以所有人的完全权限创建。这可能是个坏主意。

创建文件后File.setReadable(),您可以使用API 来调整模式位。File.setWritable如果您授予权限,这通常就足够了;如果您尝试删除其他用户的权限,那么您的权限可能应该从一开始就设置得非常严格。(umask(0777)在启动 JVM 之前,然后在您想要的位置添加权限。)

于 2011-06-03T23:21:52.390 回答