java在创建文件对象时将文件权限设置为777 [重复]

问题描述 投票:11回答:3

可能重复: How can I set the umask from within java?

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

java file file-permissions umask
3个回答
13
投票

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

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


20
投票

有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);

15
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.