下面是我的代码:
String DirectoryPath = "/Users/xxx/uploads/image";
Path newDirectoryPath = Paths.get(DirecotryPath);
if (!Files.exists(newDirectoryPath)) {
Set<PosixFilePermission> permissions = PosixFilePermissions.fromString("rwxrwxrwx");
FileAttribute<Set<PosixFilePermission>> fileAttributes = PosixFilePermissions.asFileAttribute(permissions);
Files.createDirectories(newDirectoryPath, fileAttributes);
}
创建目录后,该目录的权限不是777。
正是因为实际umask执行用户的设置。
From Posix文件属性视图
当在文件创建时设置访问权限时,权限的实际值可能与属性对象的值不同。其原因是特定于实现的。例如,在 UNIX 系统上,进程具有影响新创建文件的权限位的 umask。如果实现支持访问权限设置,并且底层文件系统支持访问权限,则要求实际访问权限的值等于或小于提供给 createFile 或 createDirectory 方法的属性值。换句话说,该文件可能比所要求的更安全。
example
POSIX.java
// add the omitted import statements
public class Posix {
public static void main(String[] args) throws IOException {
Path newDirectoryPath = Paths.get("/tmp/image");
Files.deleteIfExists(newDirectoryPath);
Set<PosixFilePermission> permissions
= PosixFilePermissions.fromString("rwxrwxrwx");
FileAttribute<Set<PosixFilePermission>> fileAttributes
= PosixFilePermissions.asFileAttribute(permissions);
Files.createDirectories(newDirectoryPath, fileAttributes);
}
}
在外壳中执行
$ cd /tmp
$ javac Posix.java
$ umask 001
$ java Posix
$ ls -ld image/
drwxrwxrw-. 2 suboptimal suboptimal 6 Jul 5 12:38 image/
$ umask 002
$ java Posix
$ ls -ld image/
drwxrwxr-x. 2 suboptimal suboptimal 6 Jul 5 12:38 image/
$ umask 004
$ java Posix
$ ls -ld image/
drwxrwx-wx. 2 suboptimal suboptimal 6 Jul 5 12:38 image/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)