我正在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要求平台上的文件系统和JDK支持NFS V4,而我不确定APFS(苹果文件系统)是否完全支持它。
因此,我的问题是:需要对代码进行哪些更改才能使文件夹“ TestResults”仅读/写,以便代码可以在每种操作系统中使用(例如,在Linux和不同版本中) Linux)