如何在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有自己的权限模型,围绕AccessControllerPermission类的使用。 权限被授予代码源(加载类的位置),在某些/大多数情况下,这些权限与访问所需资源所需的任何基础权限不同。

例如,尽管您可能已授予所有用户读取和写入/tmp目录的权限,但这对于AccessController授予代码必要权限是不够的。 您还需要在使用的策略文件中添加规则(由AccessController)以从/ tmp目录中读取和写入文件。 要创建的规则将等同于以下内容:

 grant codeBase "" { permission java.io.FilePermission "/tmp/-", "read, write"; }; 

是否要检查文件夹文件夹中文件的权限?

路径名中的“/ *”表示目录以及该目录中包含的所有文件。

见javadoc

java.io.File有两个方法, canReadcanWrite就足够了。

这似乎工作正常:

 assertFalse(Files.isWritable(new File("/etc/").toPath())); assertTrue(Files.isWritable(new File("/tmp/").toPath()));