2

コードは次のとおりです。

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);
        }
    }
}

出力:
ファイルの所有者は次のとおりです。\Everyonejava.nio.file.attribute.UserPrincipalNotFoundException
プログラム

がIOExceptionをスローしています。OSがファイルの所有者の変更を制限しているということですか?そうでない場合は、私にいくつかの解決策を提案してください。

4

1 に答える 1

0

コードを検証します。問題は更新ではなく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);

2行目で問題が発生します。「joe」という名前の既存の「Windowsユーザー」が見つからない場合があります。

Windowsユーザーでこれを試し、所有者を変更することに成功しました。

于 2012-10-04T16:26:22.733 に答える