在创建文件对象时,将Java设置文件权限为777

19

4
在JDK7中,您可以使用Files.setPosixFilePermissions将文件权限更改为您想要的任何内容。如果您需要在创建文件时原子地设置权限,则也可以这样做。 - Alan
3个回答

32

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

1
请注意,此操作在Windows系统中不可用。链接 - Rob

28

它对我不起作用,你能帮忙吗? - Bhavik Patel
是的,这对于 RH Linux 上的文件不起作用。 - Jay
如果这种方法对您不起作用,您可以尝试Stephen Ostermiller提供的解决方案。 https://dev59.com/ZW025IYBdhLWcg3wEhnr#6233604 - B378

17

如果在启动JVM之前将umask(2)设置为0,则创建的所有文件和目录都将以每个人都具有完全权限的方式创建。这很可能是一个不好的主意。

您可以使用File.setReadable()File.setWritable API在文件被创建后操作模式位。如果您正在授予权限,则通常足够了;如果您正在尝试删除其他用户的权限,则应该从一开始就非常限制地设置您的权限。(在启动JVM之前设置umask(0777),然后在需要添加权限的确切位置添加它们。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接