可能重复:
如何在 Java 中设置 umask?
在 Java 中创建文件对象时,如何将文件权限设置为777(或任何其他任意权限)?
可能重复:
如何在 Java 中设置 umask?
在 Java 中创建文件对象时,如何将文件权限设置为777(或任何其他任意权限)?
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
有三种方法可用:
setReadable(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);
如果在启动JVM之前将umask(2)
设置为0
,则创建的所有文件和目录都将以每个人都具有完全权限的方式创建。这很可能是一个不好的主意。
您可以使用File.setReadable()
、File.setWritable
API在文件被创建后操作模式位。如果您正在授予权限,则通常足够了;如果您正在尝试删除其他用户的权限,则应该从一开始就非常限制地设置您的权限。(在启动JVM之前设置umask(0777)
,然后在需要添加权限的确切位置添加它们。)