проверьте, доступна ли папка для чтения в Java 1.6

1

Я пытаюсь проверить, читается ли папка на 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

У вас есть решение?

  • 0
    В отчете об ошибке упоминается, что эта ошибка существует для файловых систем NTFS.
Теги:
file
file-permissions

2 ответа

1
Лучший ответ

Это быстро и грязно,

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

все ошибки ввода-вывода обрабатываются внутри listFiles().

1

То, что я сделал бы, это просто продолжить запись в эту папку. Если он работает, то все отлично, а если нет, вы можете поймать исключение.

Это философски подход Питонов

"Лучше попросить прощения, чем попросить разрешения"

но у вас нет выбора здесь.

Здесь хорошая статья StackOverflow на этой Философии: https://stackoverflow.com/questions/6092992/why-is-it-easier-to-ask-forgiveness-than-permission-in-python-but-not-in- java (см. "Обновление № 3" в вопросе, который является действительно хорошим примером и несколько относится к вашей проблеме)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню