我试图用以下两种方式检查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
你有解决方案吗?
答案 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()中处理。