Создание папки только для чтения через Java - PullRequest
0 голосов
/ 20 ноября 2019

Я работаю на ОС Windows. Я хочу сделать папку с именем «TestResults» только для чтения / записи. Я написал код ниже в java 11, который прекрасно работает в ОС Windows, но не работает в Mac OS.

private void setFolderPermissions(String folderPermissions) throws IOException{
        var testResultsPath = Paths.get(System.getProperty("user.dir") + File.separator + "TestResults");
        var fileAttributeView = Files.getFileAttributeView(testResultsPath, AclFileAttributeView.class);
        var entries = new ArrayList<AclEntry>();

        for (var acl : fileAttributeView.getAcl()) {
            var permissions = new LinkedHashSet<>(acl.permissions());

            if (folderPermissions.equalsIgnoreCase("read")){
                permissions.remove(AclEntryPermission.WRITE_DATA);
                permissions.remove(AclEntryPermission.APPEND_DATA);
                permissions.remove(AclEntryPermission.ADD_SUBDIRECTORY);
            }else if (folderPermissions.equalsIgnoreCase("write")){
                permissions.add(AclEntryPermission.WRITE_DATA);
                permissions.add(AclEntryPermission.APPEND_DATA);
                permissions.add(AclEntryPermission.ADD_SUBDIRECTORY);
            }

            var aclEntry = AclEntry.newBuilder()
                    .setType(acl.type())
                    .setPrincipal(acl.principal())
                    .setPermissions(permissions)
                    .setFlags(acl.flags())
                    .build();
            entries.add(aclEntry);
        }
        fileAttributeView.setAcl(entries);
    }

В Mac OS он выдает исключение нулевого указателя в строке

for (var acl : fileAttributeView.getAcl()) {

Это потому, что fileAttributeView имеет значение null.

Я понял, что ACL требует поддержки NFS V4 файловой системой и JDK на платформе, и я не уверен, что APFS (файловая система Apple) полностью поддерживаетit.

Итак, мой вопрос: Какие изменения необходимо внести в код, чтобы папка «TestResults» только для чтения / записи, чтобы код работал в каждой ОС (например,в Linux и другой вкус Linux)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...