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

4
我将使用以下代码尝试检索文件的所有者:
```python ```
    Path file = Paths.get( fileToExtract.getAbsolutePath() );
    PosixFileAttributes attr = Files.readAttributes(file, PosixFileAttributes.class); //line that throws exception

    System.out.println(attr.owner.getName());

从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)

我认为'readAttributes'方法是抽象的,这就导致了异常,但如果这是真的,我不知道如何实现这个方法来给我文件属性。
有人知道如何实现这个方法,或者已经测试过的获取文件所有者的替代方法吗?

1
Windows文件系统一开始就没有POSIX文件属性。 - chrylis -cautiouslyoptimistic-
3个回答

12

试试这个方法 - 在 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());
    }

}

2
请使用BasicFileAttributes代替。
BasicFileAttributes attr = Files.readAttributes(file, BasicFileAttributes.class);

Windows不支持Posix文件属性。


这是真的,我不知道我怎么没看到! - Mario

0

这里是关于UNIX/Linux平台文件权限的示例

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.PosixFileAttributes;
import java.nio.file.attribute.PosixFilePermission;
import java.nio.file.attribute.PosixFilePermissions;
import java.util.Set;

class A { 
    public static void main(String[] args) throws Exception
    { 
        //Make sure file exists e.g. Unix path structure
       Path p = Paths.get("/a/b/Log.txt");
       PosixFileAttributes posix = Files.readAttributes(p,        
       PosixFileAttributes.class);

       //Set Permissions if needs be for the file Log.txt
       Set<PosixFilePermission> perms =   
           PosixFilePermissions.fromString("rw-r--r--");
       Files.setPosixFilePermissions(p, perms);

       //Output the various attributes of the file named Log.txt
       System.out.println(posix.group());
       System.out.println(posix.permissions());
       System.out.println(posix.owner());

    }
 }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接