2014-09-10 2 views
0

Я создаю простую функцию, чтобы проверить погоду у меня есть запись/удаление в папкуПроблемы с проверкой разрешения папки в Java

Я хочу знать, будет ли операционная система разрешить запись в папку или нет ?

public static String PermissionCheck(String FilePath) { 
    //File f = new File(FilePath); 
    String actions = "read,write"; 
    try 
    { 
     AccessController.checkPermission(new FilePermission(FilePath, actions)); 
     return ("You have read/write permition to use : " + FilePath); 
    } 
    catch (SecurityException e) 
    { 
     return ("You don't have read/write permition to use : " + FilePath); 
    } 
} 

Когда я зову либо с правильным путем или неправильным путем метод всегда возвращает сообщение от cathc.

Я знаю его дублирующий вопрос. Я уже прошел через многие ссылки, но не повезло !!

Similar Question

Similar Question 1

Пример:

PreChecks.PermissionCheck("C:/TEST/G2"); 
PreChecks.PermissionCheck("C:/Program Files/SAP"); 

оба вызова возвращают сообщение от улова блока, в котором у меня есть все разрешения на "C:/TEST/G2" и не писать разрешение на «C:/Program Files/SAP».

Я также пробовал canWrite, но он говорит, что у меня есть права на запись в «C:/Program Files/SAP», но я знаю, что у меня их нет.

+2

Что такое исключение? Можете ли вы опубликовать трассировку стека? –

+2

Это, безусловно, поможет, если вы предоставили stacktrace исключения. – NilsH

+0

Не исключение всегда сообщение из блока catch. –

ответ

0

Класс java.io.File ограничен в его возможностях. Например.

File f=new File("C:\\Program Files\\Java"); 
System.out.println(f.canWrite()); 

печатает true на моей машине, хотя пользовательский процесс не может написать в этом месте.

В противоположность этому,

Path p=Paths.get("C:\\Program Files\\Java"); 
System.out.println(Files.isWritable(p)); 

правильно печатает false.

Таким образом, решение заключается в использовании API NIO.


Метод AccessController.checkPermission имеет совершенно другую цель. Это помогает внедрить менеджеров безопасности. Он выбрасывает SecurityException, потому что у вас нет явно разрешенных прав доступа к этому каталогу, но пока вы не установили SecurityManager, это не имеет значения.

Смежные вопросы