Мне нужно проверить разрешения на создание файлов для определенного каталога.
Я пробовал:
try {
AccessController.checkPermission(new FilePermission("directory_path", "write"));
// Have permission
} catch (SecurityException e) {
// Doesn't have permission
}
... но это всегда вызывает исключение SecurityException (насколько японял, что это проверяет не основные права доступа fs, а некоторые параметры JVM, которые должны быть настроены явно).
Другой возможный способ - использовать что-то вроде этого:
File f = new File("directory_path");
if(f.canWrite()) {
// Have permission
} else {
// Doesn't have permission
}
... но это возвращает trueдаже если я не могу создать файл в указанном каталоге (например, я не могу создать файл в "c: \", когда я запускаю свое приложение под пользователем без прав администратора, но f.canWrite () возвращает true).
InВ конце я сделал хак, похожий на этот:
File f = new File("directory_path");
try {
File.createTempFile("check", null, f).delete();
// Have permission
} catch (IOException e) {
// Doesn't have permission
}
... но это может послужить лишь временным решением, так как мне нужно получить такие разрешения почти для всех папок на клиентском компьютере.
Кто-нибудь знает, как получить РЕАЛЬНЫЕ разрешения на создание файлов, не вызывая проблем с производительностью и взломов, описанных выше?