Files.isExecutable(...)虽然我对文件具有权限但给出了false

Files.isExecutable(...)虽然我对文件具有权限但给出了false

问题描述:

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

+0

这正是你应该推断的:操作系统用户有权执行文件而不是JVM。 –

+0

所以。有没有办法授予JVM权限? – Rajasekhar

+0

看到此 - https://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html – mbsingh

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安全策略,则在致电Files.isExecutable(path)时,也会引发SecurityException,您注意到了这一点。

如果Files.isExecutable(path)返回false,你可以安全地假设一个IOException已被checkAccess或抛出,或者说,因为它是假定当前用户确实没有足够的访问权限,因为越来越之前有一个I/O问题考虑访问权限。

+0

谢谢。我试过这个,并且因为抛出异常。它变成了java 7中的[bug](http://bugs.java.com/view_bug.do?bug_id=7190897),它在8中修复。 – Rajasekhar