Я пытаюсь проверить, читается ли папка на Java 1.6 двумя способами:
1) Использование метода canRead класса File. Но он читается все время (canRead() всегда возвращает true):
final File folder = new File("file.xml");
if(folder.canRead()){
// The file is readable
}else{
// The file is not readable!!
}
2) Использование класса FilePermission и исключения catch. Но он все время исключает исключение (когда папка читаема или нет):
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
У вас есть решение?
Это быстро и грязно,
File dir = new File("foo");
if (dir.exists()) {
if (dir.listFiles() == null) {
// directory not readable
}
}
все ошибки ввода-вывода обрабатываются внутри listFiles().
То, что я сделал бы, это просто продолжить запись в эту папку. Если он работает, то все отлично, а если нет, вы можете поймать исключение.
Это философски подход Питонов
"Лучше попросить прощения, чем попросить разрешения"
но у вас нет выбора здесь.
Здесь хорошая статья StackOverflow на этой Философии: https://stackoverflow.com/questions/6092992/why-is-it-easier-to-ask-forgiveness-than-permission-in-python-but-not-in- java (см. "Обновление № 3" в вопросе, который является действительно хорошим примером и несколько относится к вашей проблеме)