如何在java7中为特定用户设置文件访问属性

时间:2013-01-18 16:46:09

标签: java nio java-7 nio2

我正在使用java7文件API。用于设置我搜索过的文件的所有者,并且能够更改所有者属性。我的代码是

public static void main(String[] args){

    Path zip=Paths.get("/home/ritesh/hello");
    try{ 
        FileOwnerAttributeView view 
             = Files.getFileAttributeView(zip,FileOwnerAttributeView.class);

        UserPrincipalLookupService lookupService
             =FileSystems.getDefaullt().getUserPrincipalLookupService();

        UserPrincipal owner=null;

        try{ owner =lookupService.lookupPrincipalByName("rashmi");}
        catch(UserPrincipalNotFoundException e){System.out.println("User not found");}

        view.setOwner(owner);

    } catch (IOException e){
        e.printStackTrace();}
    }

从这段代码我可以设置文件的所有者。但我的任务是给用户(rashmi)读取文件的访问权限和另外一个用户提供读/写访问权限。给用户特定的访问权限请提供一些代码或链接,以便我可以完成我的任务。

2 个答案:

答案 0 :(得分:2)

这取自{7}的Java 7 Javadoc(稍微重新格式化):

AclFileAttributeView

您需要使用正确的 // lookup "joe" UserPrincipal joe = file.getFileSystem().getUserPrincipalLookupService() .lookupPrincipalByName("joe"); // get view AclFileAttributeView view = Files.getFileAttributeView(file, AclFileAttributeView.class); // create ACE to give "joe" read access AclEntry entry = AclEntry.newBuilder() .setType(AclEntryType.ALLOW) .setPrincipal(joe) .setPermissions(AclEntryPermission.READ_DATA, AclEntryPermission.READ_ATTRIBUTES) .build(); // read ACL, insert ACE, re-write ACL List<AclEntry> acl = view.getAcl(); acl.add(0, entry); // insert before any DENY entries view.setAcl(acl); 代码。请参阅AclFileAttributeView Javadoc

答案 1 :(得分:0)

您必须了解操作系统的权限政策, 你不能为不同的用户指定不同的权限,你必须以其他方式。

文件权限定义为3个八进制数字(基数为8),这是3组3个二进制数, 每3位代表Read,Write,Execute 第一组是Owner,第二组是Group,第三组是Other

所以,如果你想提供不同的权限,可以设置Group属性以便读取和写入,而其他只是为了阅读,之后,你必须添加你想要能够读写的用户对这个群体。