Я работаю на ОС 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)