使用java获取文件所有者元数据信息

Mar*_*rio 3 java windows nio metadata

我正在尝试使用以下代码检索文件的所有者:

    Path file = Paths.get( fileToExtract.getAbsolutePath() );
    PosixFileAttributes attr = Files.readAttributes(file, PosixFileAttributes.class); //line that throws exception

    System.out.println(attr.owner.getName());
Run Code Online (Sandbox Code Playgroud)

取自oracle的页面(http://docs.oracle.com/javase/tutorial/essential/io/fileAttr.html)

但我总是在上面指出的行上得到UnsupportedOperationException.

java.lang.UnsupportedOperationException
at sun.nio.fs.WindowsFileSystemProvider.readAttributes(WindowsFileSystemProvider.java:192)
at java.nio.file.Files.readAttributes(Files.java:1684)
Run Code Online (Sandbox Code Playgroud)

我认为'readAttributes'方法是抽象的,这会导致异常,但是(如果这是真的)我不知道如何实现这个方法以便给我文件属性.

有谁知道如何实现此方法,或者另一种方法(已测试)来获取文件所有者?

drk*_*bar 11

试试这个 - 也适用于Windows

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.FileOwnerAttributeView;
import java.nio.file.attribute.UserPrincipal;

public class FileOwner {

    public static void main(String[] args) throws IOException {
        Path path = Paths.get("/tmp");
        FileOwnerAttributeView ownerAttributeView = Files.getFileAttributeView(path, FileOwnerAttributeView.class);
        UserPrincipal owner = ownerAttributeView.getOwner();
        System.out.println("owner: " + owner.getName());
    }

}
Run Code Online (Sandbox Code Playgroud)