通过Java使文件夹只读

时间:2019-11-20 17:34:28

标签: java linux windows macos unix

我正在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)

0 个答案:

没有答案