无法读取Windows文件,即使它有;改为;通过java设置权限

无法读取Windows文件,即使它有;改为;通过java设置权限,java,windows,permissions,java.nio.file,Java,Windows,Permissions,Java.nio.file,我正在尝试从windows中的java为管理员组设置文件权限。 下面是我的代码: public static void main(String[] args) throws IOException { final Path path = Paths.get("C:/Dev/dummy/test"); FileAttribute<?> permissions = new FileAttribute<List<AclEntry>>() { pu

我正在尝试从windows中的java为管理员组设置文件权限。 下面是我的代码:

public static void main(String[] args) throws IOException   {

 final Path path = Paths.get("C:/Dev/dummy/test"); 
 FileAttribute<?> permissions = new FileAttribute<List<AclEntry>>() {
    public String name() {
        return "acl:acl";
    }
    public List<AclEntry> value() {
        try {
            return get600ACL(path.getFileSystem());
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
 };

  Files.createFile(path, permissions);
publicstaticvoidmain(字符串[]args)引发IOException{
final Path=Path.get(“C:/Dev/dummy/test”);

FileAttribute权限=新建FileAttribute@ArvindKumarAvinash添加了完整的代码。是的,我从Vista(2006年)开始以Path file=Path.get(“c:/test.txt”)的形式获取,管理员受UAC限制,这意味着他们使用两个令牌登录--标准访问、中等完整性级别令牌和管理员访问、高完整性级别令牌,标准访问令牌是返回并用于交互式会话的令牌。获取管理员访问权需要使用系统服务提升例如Appinfo服务(例如“以管理员身份运行”)。除非该帐户不受UAC限制,否则无法通过runas.exe或底层
CreateProcessWithLogonW
API函数获得管理员访问权限。@ErykSun感谢您的响应。当我手动尝试“以管理员身份运行”时,它成功了。我假设如果用户具有管理员权限,他将能够直接访问。我的错误:)在非提升的命令提示符下运行
whoami/groups/fo list
,以查看用户的组和每个组的属性。请注意,内置\Administrators(s-1-5-32-544)仅用于deny,这意味着它仅对DACL中的deny ACEs有效,而不对ALLOW ACEs有效。请在提升的命令提示符下重试。在这种情况下,administrators组将对所有ACEs启用,并将其设置为对象的所有者。@ErykSun感谢您的输入。我将尝试此操作。我还有一个查询。我只提供了read管理员组的权限。但成员可以删除该文件。我希望他们只能读取该文件,但不能删除。在搜索时,我发现“防止文件删除的唯一方法是不授予读取权限并明确拒绝删除权限。”这是真的吗?是否有任何权限设置可以让管理员组只读取而不删除该文件?请提前感谢
private static List<AclEntry> get600ACL(FileSystem fileSystem) throws IOException {

List<AclEntry> aclEntryList = new ArrayList<AclEntry>();
 AclEntry.Builder acl3 = AclEntry.newBuilder();
 acl3.setPermissions(EnumSet.of(
         AclEntryPermission.READ_DATA, AclEntryPermission.WRITE_DATA, AclEntryPermission.WRITE_ATTRIBUTES,
         AclEntryPermission.SYNCHRONIZE, AclEntryPermission.READ_ACL, AclEntryPermission.READ_ATTRIBUTES, AclEntryPermission.READ_NAMED_ATTRS,
         AclEntryPermission.DELETE, AclEntryPermission.WRITE_NAMED_ATTRS, AclEntryPermission.APPEND_DATA, AclEntryPermission.EXECUTE, AclEntryPermission.DELETE,
         AclEntryPermission.DELETE_CHILD, AclEntryPermission.ADD_FILE, AclEntryPermission.ADD_SUBDIRECTORY, AclEntryPermission.LIST_DIRECTORY, AclEntryPermission.WRITE_ACL,
         AclEntryPermission.WRITE_ATTRIBUTES, AclEntryPermission.WRITE_DATA, AclEntryPermission.WRITE_OWNER
 ));
 GroupPrincipal grp2 = fileSystem.getUserPrincipalLookupService().lookupPrincipalByGroupName("Administrators");
 acl3.setPrincipal(grp2);
 acl3.setType(AclEntryType.ALLOW);
 AclEntry entry3 = acl3.build();
 aclEntryList.add(entry3);
 return aclEntryList;
}