如何在Java中检查文件权限(OS独立)

Jar*_*bek 9 java file-permissions

我有以下代码片段:

public class ExampleClass {

public static void main(String[] args) throws FileNotFoundException {
    String filePath = args[0];
    File file = new File(filePath);

    if (!file.exists())
        throw new FileNotFoundException();

    if (file.canWrite())
        System.out.println(file.getAbsolutePath() + ": CAN WRITE!!!");
    else
        System.out.println(file.getAbsolutePath() + ": CANNOT WRITE!!!!!");

    if (file.canRead())
        System.out.println(file.getAbsolutePath() + ": CAN READ!!!");
    else
        System.out.println(file.getAbsolutePath() + ": CANNOT READ!!!!!");

    if (file.canExecute())
        System.out.println(file.getAbsolutePath() + ": CAN EXECUTE!!!");
    else
        System.out.println(file.getAbsolutePath() + ": CANNOT EXECUTE!!!!!");
}
}
Run Code Online (Sandbox Code Playgroud)

它适用于Linux操作系统,但问题是它在windows7中不起作用.所以问题是:是否有人知道在Java OS中独立检查文件权限的方法?

Ste*_*n C 5

这可能是由某种东西(例如反病毒产品)以不一致的方式"调解"文件访问引起的.

当然,很难相信Java File.canXxxx()方法通常会破坏任何Windows风格.


更新 - 我把它拿回来.阅读这篇Sun bug报告 ......然后哭泣.简短的回答是它是一个Windows错误,Sun决定不解决它.(但新的Java 7 API 确实有用......)

FWIW,我认为尝试检查这样的文件访问权限是不好的做法.最好只是尝试使用该文件,并在发生时捕获异常.有关我的推理,请参阅/sf/answers/426512621/.(现在我们有另一个原因......)


Lin*_*abo 5

我已经对 NIO API(来自 Java 7)进行了一些测试,它们似乎工作得很好。

import java.io.FileNotFoundException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class PermissionCheck {

    public static void main(String[] args) throws FileNotFoundException {

        String filePath = args[0];
        Path p = Paths.get(filePath);

        if (Files.notExists(p))
            throw new FileNotFoundException();

        if (Files.isWritable(p))
            ...

        if (Files.isReadable(p))
            ...

        if (Files.isExecutable(p))
            ...
    }
}
Run Code Online (Sandbox Code Playgroud)

JDK:1.7.0_25、1.8.0_91

操作系统:Windows 7、8(64 位)