【发布时间】:2017-06-12 04:06:02
【问题描述】:
我正在尝试创建具有公共写入权限的目录。为了简化事情,我希望它拥有777 权限。这是我的代码:
private static FileAttribute<Set<PosixFilePermission>> DIR_PERMISSIONS;
static {
Set<PosixFilePermission> perms = new HashSet<>();
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);
DIR_PERMISSIONS = PosixFilePermissions.asFileAttribute(perms);
}
private Path ensurePath(LocalDate localDate) throws IOException {
String year = String.valueOf(localDate.getYear());
String month = String.format("%02d", localDate.getMonthValue());
Path path = Paths.get(rootDirectory, year, month);
return Files.createDirectories(path, DIR_PERMISSIONS);
}
对于rootDirectory=/tmp/data,这应该创建像/tmp/data/2016/01 这样的文件夹,每个文件夹都具有777 权限。相反,文件夹具有775 权限(drwxrwxr-x.),因此它们缺少公共写入。为什么它会这样工作?也许JVM需要特殊的参数才能设置这样的权限?
我的系统是Fedora 24,app是标准的Spring Boot应用,由maven插件启动。
【问题讨论】:
-
@OlivierGrégoire 这不是重复的,因为这不能解释为什么它会以 775 的形式出现。
-
@Michael 这里问题的主要部分是“我不能”,而不是“为什么”。另一个主题中接受的答案是完整的,如何解决这个问题。
-
@OlivierGrégoire “为什么会这样?”
-
目录是否可能已经存在?如果是这样,Files.createDirectories 将不会使用新权限。
-
您的 Java 进程正在运行的
umask的值是多少?不会是002,对吗?
标签: java file posix nio file-permissions