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