如何使用java获取目录的文件权限

时间:2011-01-11 18:04:05

标签: java unix file-io permissions

我尝试检查授予linux目录的权限,我的意思是我有一个拥有755权限的目录

berty@berty-laptop:~$ ls -l / |grep directory
drwxr-xr-x   3 root root    4096 2011-01-10 12:33 directory

我如何用java读取该权限?我尝试过使用FilePermission但是我有一个包含所有权限的目录(777),FilePermission类总是返回异常

java.security.AccessControlException: Access denied (java.io.FilePermission /home/directory read)
 at java.security.AccessController.checkPermission(AccessController.java:103)
 at com.snippets.Check4DirectoryPermission.checker(Check4DirectoryPermission.java:50)
 at com.snippets.Check4DirectoryPermission.main(Check4DirectoryPermission.java:70)

还有另一种方法吗?

2 个答案:

答案 0 :(得分:3)

java.io.File.canRead(),其中文件实例是代表dir的文件实例

  

返回:       当且仅当此抽象路径名指定的文件存在且可由应用程序读取时才返回true;否则是假的

答案 1 :(得分:3)

我认为你犯了一个错误:ls命令显示/directory的存在,但Java代码抱怨/home/directory - 除非你有一个名为directory的用户,否则它不存在

从堆栈跟踪中,我假设您自己创建了一个FilePermission对象,并将其交给AccessController.checkPermission()。这不是它的使用方式 - FilePermission类 NOT 表示文件系统权限,不检查它们。它仅由Java的SecurityManager使用,例如:它查看策略文件是否包含允许应用程序访问该文件的规则。本地文件系统是否支持权限不是它的关注点。

正如Bozho建议的那样,您创建了一个java.io.File()对象,并使用canXXX()方法检查您是否可以访问该文件夹或文件。

如果您需要有关文件的文件系统级权限的更多详细信息,则需要等待Java 7.请参阅the Java NIO.2 Tutorial,尤其是java.nio.file.attribute包。