Creating Directory by NIO2

creating directory

  1. create dir1
  2. create dir2/dir3 with permission("rwxrwxr-x")

As you can see the below result, the permission is set only to the dir3.
This is obvious, since Files.setPosixFilePermissions apply only to the path(dir3).
Anyway it is possible to set permission depending on the OS.
I find out this function when reading Java SE7/8 速攻入門, author is @, who is Java champion.

f:id:tomoTaka:20160915212426p:plain

package com.test;

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.PosixFilePermission;
import java.nio.file.attribute.PosixFilePermissions;
import java.util.Set;

public class Test {
    public static void main(String[] args) throws Exception {
        Test test = new Test();
        test.createDir("/Users/tomo/dir1");
        test.createDir("/Users/tomo/dir2/dir3", "rwxrwxr-x");
    }
    private void createDir(String dirPath) throws Exception {
        Path path = Paths.get(dirPath);
        Files.createDirectories(path);
    }
    private void createDir(String dirPath, String permission) throws Exception {
        Path path = Paths.get(dirPath);
        Files.createDirectories(path);
        Set<PosixFilePermission> permissionSet = PosixFilePermissions.fromString(permission);
        Files.setPosixFilePermissions(path, permissionSet); // *** set permission
    }
}
Permission error

You can not set permission SUID, SGID and Sticky bit...
I just wanted to set it.

PosixFilePermissions.java

    public static Set<PosixFilePermission> fromString(String perms) {
        if (perms.length() != 9)
            throw new IllegalArgumentException("Invalid mode");
        Set<PosixFilePermission> result = EnumSet.noneOf(PosixFilePermission.class);
        if (isR(perms.charAt(0))) result.add(OWNER_READ);
        if (isW(perms.charAt(1))) result.add(OWNER_WRITE);
        if (isX(perms.charAt(2))) result.add(OWNER_EXECUTE);
        if (isR(perms.charAt(3))) result.add(GROUP_READ);
        if (isW(perms.charAt(4))) result.add(GROUP_WRITE);
        if (isX(perms.charAt(5))) result.add(GROUP_EXECUTE);
        if (isR(perms.charAt(6))) result.add(OTHERS_READ);
        if (isW(perms.charAt(7))) result.add(OTHERS_WRITE);
        if (isX(perms.charAt(8))) result.add(OTHERS_EXECUTE);
        return result;
    }