Как я могу получить разрешение файла каталога с Java - PullRequest
0 голосов
/ 11 января 2011

Я пытаюсь проверить разрешение, предоставленное для каталога в Linux, я имею в виду, у меня есть каталог с разрешением 755

berty@berty-laptop:~$ ls -l / |grep directory
drwxr-xr-x   3 root root    4096 2011-01-10 12:33 directory

Как я могу прочитать это разрешение с Java?Я пытался использовать FilePermission, но хотя у меня есть каталог со всеми разрешениями (777), класс FilePermission всегда возвращает исключение

java.security.AccessControlException: Access denied (java.io.FilePermission /home/directory read)
 at java.security.AccessController.checkPermission(AccessController.java:103)
 at com.snippets.Check4DirectoryPermission.checker(Check4DirectoryPermission.java:50)
 at com.snippets.Check4DirectoryPermission.main(Check4DirectoryPermission.java:70)

, есть ли другой способ сделать это?

Ответы [ 2 ]

3 голосов
/ 11 января 2011

Я думаю, что вы допустили ошибку: команда ls показывает существование /directory, но код Java жалуется на /home/directory - которого не существует, если у вас нет пользователя с именем directory.

Исходя из вашей трассировки стека, я предполагаю, что вы сами создаете объект FilePermission и передаете его AccessController.checkPermission (). Это не то, как он используется - класс FilePermission НЕ представляет разрешения файловой системы и НЕ проверяет их. Он используется только в SecurityManager Java, например, он проверяет, содержит ли файл политики правила, позволяющие приложению получить доступ к файлу. Независимо от того, поддерживает ли локальная файловая система разрешения или нет, это не имеет значения.

Как подсказывает Божо, вы создаете объект java.io.File() и используете методы canXXX(), чтобы проверить, есть ли у вас доступ к папке или файлу.

Если вам нужна более подробная информация о разрешениях на уровне файловой системы для файла, вам нужно дождаться Java 7. См. Учебное пособие по Java NIO.2 , особенно пакет java.nio.file.attribute.

3 голосов
/ 11 января 2011

java.io.File.canRead(), где экземпляром файла является тот, который представляет dir

Возвращает: true, если и только если файл, указанный этим абстрактным путем, существует и может бытьпрочитано приложением;ложь в противном случае

...