Создать каталог с правами на запись для группы - PullRequest
12 голосов
/ 19 февраля 2009

Я создаю папку в моей java-программе (работающей на linux) с функцией mkdirs () объекта File Проблема в том, что папка получает только права на чтение для группы. Мне нужно, чтобы он также имел права на запись (чтобы потом можно было удалить его файлы). Как это сделать?

Ответы [ 5 ]

18 голосов
/ 19 сентября 2012

Очень простое решение для этого:

file.setExecutable(true, false);
file.setReadable(true, false);
file.setWritable(true, false);

В приведенном выше коде файл является объектом File.

При создании файла установите эти права доступа к файлу setExecutable(true), что позволит вам установить этот файл как Executable только для владельца. Если вы добавите еще один параметр, который я добавил в коде выше, file.setExecutable(true, false); сделает Executable false только для владельца, это означает, что он будет устанавливать разрешения для всей группы / мира.

Протестировано и работает на Debian и Windows XP.

9 голосов
/ 17 июля 2012

Java nio может помочь с атрибутами файла posix: https://docs.oracle.com/javase/8/docs/api/java/nio/file/attribute/PosixFileAttributeView.html

Path path = ...
 Set<PosixFilePermission> perms =
     EnumSet.of(OWNER_READ, OWNER_WRITE, OWNER_EXECUTE, GROUP_READ, GROUP_WRITE);
 Files.createFile(path, PosixFilePermissions.asFileAttribute(perms));
2 голосов
/ 19 февраля 2009

Я подозреваю (если / до тех пор, пока кто-то не отправит ответ об обратном), что в стандартной библиотеке Java нет способа сделать это, потому что разрешения группы POSIX (тип rwxrwxrwx, к которому вы привыкли) не являются кроссплатформенными. Java 6 позволит вам устанавливать права доступа владельца или глобальные разрешения, но (насколько я могу судить) не групповые разрешения. Если вы действительно должны это сделать, попробуйте использовать Runtime.exec("chmod g+w directory"), но было бы неплохо стилистически обернуть его таким способом, как setGroupWritable().

1 голос
/ 19 февраля 2009

ОК, это не решение Java, и оно определенно не переносимо.

Поскольку вы упоминаете, что вы - linux, возможно, вы можете подумать о проверке настроек "umask" и их настройке (для создания каталогов с правами на запись в группу), а затем о запуске вашей Java-программы.

0 голосов
/ 19 февраля 2009

В Java 6 есть методы, которые позволяют вам сделать это, например setwriteable (). В предыдущих версиях Java вам нужно будет получить доступ к командной строке, чтобы выполнить команду chmod.

Класс файла Java 6 SE Док.

РЕДАКТИРОВАТЬ: Woops, я совершенно не прав; Я не заметил, что вам нужны именно групповые разрешения. Они не могут быть установлены без Runtime.exec ().

@ Дэвид: Ты прав.

Еще одна мысль: если вам нужно изменить много файлов, как насчет написания сценария оболочки и вызова его из runtime.exec ()?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...