Files.isExecutable(...)虽然我拥有该文件的权限但却给出了错误

时间:2017-02-24 16:34:40

标签: java jvm

我正在使用java.nio.file.Files类来检查登录用户是否有权执行文件。虽然我有权执行文件(即我可以手动运行该文件),但isExecutable(pathToFile)返回false。 JVM没有执行文件的权限吗?

1 个答案:

答案 0 :(得分:1)

Files.is…便捷方法(例如Files.isExecutable(path))很好,如果一个简单的true / false答案就足够了,在这种情况下,它们可以避免处理异常处理,但是当你想了解细节时却没什么用处。如果您回顾后台会发生什么,您可以自己catch异常,找出JVM假定执行文件不起作用的原因:

try {
    path.getFileSystem().provider().checkAccess(path, AccessMode.EXECUTE);
    System.out.println("can execute "+path);
} catch(IOException ex) {
    System.out.println("can not execute: "+ex);
}

异常(或其实际类型)可能会告诉您原因。

请注意,这是IOException。与您的问题的评论相反,您可以排除安全策略问题。如果存在禁止访问的JVM安全策略,则在调用您注意到的SecurityException时也会抛出Files.isExecutable(path)

如果Files.isExecutable(path)返回false,您可以安全地假设IOException已被checkAccess抛出,因为假设当前用户确实没有足够的访问权限或因为在考虑访问权限之前存在I / O问题。