场景描述
这次也是工作中遇到的问题,多个用户要往同一个磁盘目录下写文件,该目录谁先用到谁创建。这就要求创建的目录是公共可写的,但java创建目录大都是 755 权限的,不满足要求。
解决办法
代码如下:
@Test
public void should_create_folder_with_permission() throws IOException {
Set<PosixFilePermission> fullPermission = new HashSet<>();
fullPermission.add(PosixFilePermission.OWNER_EXECUTE);
fullPermission.add(PosixFilePermission.OWNER_READ);
fullPermission.add(PosixFilePermission.OWNER_WRITE);
fullPermission.add(PosixFilePermission.GROUP_EXECUTE);
fullPermission.add(PosixFilePermission.GROUP_READ);
fullPermission.add(PosixFilePermission.GROUP_WRITE);
fullPermission.add(PosixFilePermission.OTHERS_EXECUTE);
fullPermission.add(PosixFilePermission.OTHERS_READ);
fullPermission.add(PosixFilePermission.OTHERS_WRITE);
java.nio.file.Path path = Paths.get("/Users/mac/Downloads/output", "/primission2");
try {
Files.createDirectories(path, PosixFilePermissions.asFileAttribute(fullPermission));
outputLS(path);
Files.setPosixFilePermissions(path, fullPermission);
outputLS(path);
} catch (Exception e) {
e.printStackTrace();
}
}
private void outputLS(java.nio.file.Path path) throws IOException {
System.out.println(new java.util.Scanner(
Runtime.getRuntime().exec("ls -alt " + path.toAbsolutePath() + "/..")
.getInputStream()).useDelimiter("\\A").next());
}
结果:
total 24
drwxr-xr-x 7 mac staff 224 Aug 15 16:57 .
drwxr-xr-x 2 mac staff 64 Aug 15 16:57 primission2
drwxr-xr-x 3 mac staff 96 Aug 15 16:26 another
drwxr-xr-x@ 4 mac staff 128 Aug 15 16:16 20220815-041630
-rw-r--r--@ 1 mac staff 12 Aug 11 14:59 .S2101-20220103-reco-result006.txt.crc
total 24
drwxr-xr-x 7 mac staff 224 Aug 15 16:57 .
drwxrwxrwx 2 mac staff 64 Aug 15 16:57 primission2
drwxr-xr-x 3 mac staff 96 Aug 15 16:26 another
drwxr-xr-x@ 4 mac staff 128 Aug 15 16:16 20220815-041630
-rw-r--r--@ 1 mac staff 12 Aug 11 14:59 .S2101-20220103-reco-result006.txt.crc
参考链接:https://stackoverflow.com/questions/41877638/java-unable-to-create-directory-with-777-permission-has-775-instead.