检查Java 1.6中的文件夹是否可读

时间:2014-05-29 16:46:55

标签: java file file-permissions

我试图用以下两种方式检查Java 1.6中的文件夹是否可读:

1)使用File类的canRead方法。但它一直都是可读的(canRead()总是返回true):

final File folder = new File("file.xml");
if(folder.canRead()){
   // The file is readable
}else{

  // The file is not readable!!
}

2)使用FilePermission类并捕获异常。但它始终捕获异常(当文件夹可读或不可读时):

try {

  FilePermission filePermission = new FilePermission(folder.getAbsolutePath(), "read");
AccessController.checkPermission(filePermission);

// The file is readable


} catch (AccessControlException pACE) {
 // The file is not readable !!
} 

我发现Microsoft Windows操作系统和Java 1.6之间存在此问题。

错误:http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6203387

你有解决方案吗?

2 个答案:

答案 0 :(得分:1)

我要做的就是继续写一个文件夹。如果它工作,那么一切都很好,如果没有,你可以捕获异常。

这在哲学上是一种Pythonic方法

  

"要求宽恕比要求许可更好#34;

但你似乎没有选择。

这里有一篇关于这个哲学的好StackOverflow帖子:https://stackoverflow.com/questions/6092992/why-is-it-easier-to-ask-forgiveness-than-permission-in-python-but-not-in-java(参见'更新#3'在问题中这是一个非常好的例子,并且与你的问题有些关联)

答案 1 :(得分:1)

这很快又脏,

File dir = new File("foo");
if (dir.exists()) {
   if (dir.listFiles() == null) {
      // directory not readable
   }
}

所有IO错误都在listFiles()中处理。