Создать каталог с правами на запись для группы

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

5 ответов

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

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

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

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

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

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));

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

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

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

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

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

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

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

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

Другие вопросы по тегам