Я создаю папку в моей java-программе (работающей на linux) с функцией mkdirs() объекта File. Проблема в том, что папка получает только разрешения на чтение для группы. Мне нужно, чтобы у него также были права на запись (чтобы впоследствии удалять его файлы). Каков способ сделать это?
Создать каталог с разрешениями записи для группы
Ответ 1
Очень простое решение для этого:
file.setExecutable(true, false);
file.setReadable(true, false);
file.setWritable(true, false);
В приведенном выше коде файл является файлом.
Когда вы создаете файл, эти разрешения для файла setExecutable(true)
позволят вам установить этот файл как Executable
только для владельца. Если вы добавите еще один параметр, который я добавил в приведенный выше код file.setExecutable(true, false);
, вы сделаете Executable
false
только для владельца, это означает, что он установит разрешения для всех групп/мира.
Протестировано и работает на Debian и Windows XP.
Ответ 2
Java nio может помочь с атрибутами файла posix: http://openjdk.java.net/projects/nio/javadoc/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));
Ответ 3
Я подозреваю (если/пока кто-то не ответит на вопрос об обратном), что нет возможности сделать это в стандартной библиотеке Java, поскольку разрешения группы POSIX (тип rwxrwxrwx, к которым вы привыкли) не являются кросс-платформенными. Java 6 позволит вам устанавливать разрешения владельца или глобальные разрешения, но (насколько я могу судить), а не групповые разрешения. Если вы действительно должны это сделать, попробуйте использовать Runtime.exec("chmod g+w directory")
, но стилистически может быть стилистически обернуть его в методе типа setGroupWritable()
.
Ответ 4
ОК, это не Java-решение и, безусловно, не переносимое.
Поскольку вы упоминаете, что вы Linux, вероятно, вы можете подумать о том, чтобы проверить настройки "umask" и соответствующим образом настроить его (чтобы создать каталоги с разрешениями групповой записи), а затем запустить вашу Java-программу.
Ответ 5
В java 6 есть методы, которые позволяют вам это делать, например setwriteable(). В предыдущих версиях java вам нужно получить доступ к командной строке для выполнения команды chmod.
ИЗМЕНИТЬ: Вордс, я совершенно неправ; Я не заметил, что вам нужны групповые разрешения. Они не могут быть установлены без Runtime.exec().
@David: Вы правы.
Другая мысль: если у вас есть много файлов для изменения, как насчет написания оболочки script и вызова этого из runtime.exec()?