xia*_*oss 6 java posix file-permissions nio file
我正在尝试使用公共写权限创建目录.为了简化我希望它拥有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);
}
Run Code Online (Sandbox Code Playgroud)
有了rootDirectory=/tmp/data这应该创建文件夹一样/tmp/data/2016/01,各有777权限.相反,文件夹具有775权限(drwxrwxr-x.),因此它们缺少公共写入.为什么这样工作?也许JVM需要特殊的参数才能设置这样的权限?我的系统是Fedora 24,app是标准的Spring Boot应用程序,由maven插件启动.
好吧,这让我很好奇,所以这里是:
\n\n谷歌导致了这一点:/sf/answers/1789056321/(“Java正在设置您寻求的权限,然后它被屏蔽掉。”)然后返回@OlivierGr的链接xc3\xa9goire 最初提供。乌马斯克是一位严厉的情妇。
\n\nSpring Boot 与此行为无关。下面是一个简单的概念证明。我的默认 umask 是 0002。我的 /tmp 目录最初是空的。
\n\npublic class Test {\n public static void main(String[] args) {\n Set<PosixFilePermission> fullPermission = new HashSet<PosixFilePermission>();\n fullPermission.add(PosixFilePermission.OWNER_EXECUTE);\n fullPermission.add(PosixFilePermission.OWNER_READ);\n fullPermission.add(PosixFilePermission.OWNER_WRITE);\n\n fullPermission.add(PosixFilePermission.GROUP_EXECUTE);\n fullPermission.add(PosixFilePermission.GROUP_READ);\n fullPermission.add(PosixFilePermission.GROUP_WRITE);\n\n fullPermission.add(PosixFilePermission.OTHERS_EXECUTE);\n fullPermission.add(PosixFilePermission.OTHERS_READ);\n fullPermission.add(PosixFilePermission.OTHERS_WRITE);\n\n Path path = Paths.get("/tmp/data/", "01/26");\n try {\n Files.createDirectories(path, PosixFilePermissions.asFileAttribute(fullPermission)); \n outputLS(path); \n Files.setPosixFilePermissions(path, fullPermission); \n outputLS(path); \n } catch (Exception e) {\n e.printStackTrace();\n }\n }\n\n private static void outputLS(Path path) throws IOException {\n System.out.println(new java.util.Scanner(Runtime.getRuntime().exec("ls -alt " + path.toAbsolutePath() + "/..").getInputStream()).useDelimiter("\\\\A").next());\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n产量:
\n\ntotal 12\ndrwxrwxr-x 3 jsampson jsampson 4096 Jan 26 21:53 .\ndrwxrwxr-x 2 jsampson jsampson 4096 Jan 26 21:53 26\ndrwxrwxr-x 3 jsampson jsampson 4096 Jan 26 21:53 ..\n\ntotal 12\ndrwxrwxr-x 3 jsampson jsampson 4096 Jan 26 21:53 .\ndrwxrwxrwx 2 jsampson jsampson 4096 Jan 26 21:53 26\ndrwxrwxr-x 3 jsampson jsampson 4096 Jan 26 21:53 ..\nRun Code Online (Sandbox Code Playgroud)\n\numask只是负责所有文件/目录创建权限。创建后可以进行更改。
\n| 归档时间: |
|
| 查看次数: |
1673 次 |
| 最近记录: |