如何在java中检查目录的写权限?
我想要一个代码片段,用于检查目录是否具有读/写权限,如果有,则执行某些操作,如果没有,则执行其他操作。 我试过这里显示的一个例子:
try { AccessController.checkPermission(new FilePermission("/tmp/*", "read,write")); System.out.println("Good"); // Has permission } catch (SecurityException e) { // Does not have permission System.out.println("Bad"); }
问题是exception总是被触发,因此无论目录是否具有写权限,它总是会打印“Bad”。 (我将目录chmod到777或000进行测试)。
是否有替代或某种方式来实现我的需要?
如果你只是想检查你是否可以写:
File f = new File("path"); if(f.canWrite()) { // write access } else { // no write access }
为了检查读访问,有一个函数canRead()
在Java 7中,我这样做:
if(Files.isWritable(path)){ //ok, write }
文件
您应该单独使用目录的路径( "/tmp"
)来查询目录的权限:
AccessController.checkPermission(new FilePermission("/tmp", "read,write"));
使用"/tmp/*"
可以查询/tmp
目录中所有文件的权限。
Java有自己的权限模型,围绕AccessController
和Permission
类的使用。 权限被授予代码源(加载类的位置),在某些/大多数情况下,这些权限与访问所需资源所需的任何基础权限不同。
例如,尽管您可能已授予所有用户读取和写入/tmp
目录的权限,但这对于AccessController授予代码必要权限是不够的。 您还需要在使用的策略文件中添加规则(由AccessController)以从/ tmp目录中读取和写入文件。 要创建的规则将等同于以下内容:
grant codeBase "" { permission java.io.FilePermission "/tmp/-", "read, write"; };
是否要检查文件夹或文件夹中文件的权限?
路径名中的“/ *”表示目录以及该目录中包含的所有文件。
见javadoc
java.io.File
有两个方法, canRead
和canWrite
就足够了。
这似乎工作正常:
assertFalse(Files.isWritable(new File("/etc/").toPath())); assertTrue(Files.isWritable(new File("/tmp/").toPath()));