这是代码:

import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.Files;
import java.nio.file.attribute.UserPrincipalLookupService;
import java.nio.file.attribute.UserPrincipal;
import java.nio.file.FileSystems;
import java.lang.UnsupportedOperationException;
import java.io.IOException;

public class SetOwnerOfFile{
    public static void main(String args[]){
        Path path=Paths.get("c:\\demotext.txt");
        try{
            UserPrincipal owner=Files.getOwner(path);
            System.out.format("The owner of file is: %s%n",owner.getName());

            UserPrincipalLookupService lookupservice=FileSystems.getDefault().getUserPrincipalLookupService();
            Files.setOwner(path,lookupservice.lookupPrincipalByName("joe"));

            UserPrincipal newowner=Files.getOwner(path);
            System.out.format("Now the owner of file is: %s%n",newowner.getName());
        }
        catch(UnsupportedOperationException x){
            System.err.println(x);
        }
        catch(IOException x){
            System.err.println(x);
        }
    }
}


输出:
文件的所有者是:\ Everyone
java.nio.file.attribute.UserPrincipalNotFoundException
程序抛出IOException。这是否意味着我的操作系统限制了文件所有者的修改?如果没有,请建议我一些解决方案。

最佳答案

我验证您的代码。问题不在于更新owner而是找到UserPrincinpal。如果您在下面分手声明:

        UserPrincipalLookupService lookupservice=FileSystems.getDefault().getUserPrincipalLookupService();
        Files.setOwner(path,lookupservice.lookupPrincipalByName("joe"));


这样:

        UserPrincipalLookupService lookupservice=FileSystems.getDefault().getUserPrincipalLookupService();
        UserPrincipal userPrincipal = lookupservice.lookupPrincipalByName("joe");
        Files.setOwner(path,userPrincipal);


您将在第二行看到问题。可能是无法找到名称为“ joe”的现有“ Windows用户”。

我与Windows用户一起尝试了此操作,并成功更改了所有者。

关于java - 在Windows XP SP2中的Java(Ver-7)中设置文件的所有者,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12731277/

10-13 05:04