В Java я динамически создаю набор файлов, и мне хотелось бы изменить права доступа к этим файлам в файловой системе linux / unix. Я хотел бы иметь возможность выполнять Java-эквивалент chmod
. Возможна ли Java 5? Если да, то как?
Я знаю, что в Java 6 у File
объекта есть setReadable()
/ setWritable()
методы. Я также знаю, что могу сделать это системным вызовом, но по возможности я бы хотел этого избежать.
java
filesystems
Рой Рико
источник
источник
Files.setPosixFilePermissions(path, PosixFilePermissions.fromString("rwxr-x---"))
Ответы:
Полный контроль над атрибутами файлов доступен в Java 7 как часть «нового» средства New IO ( NIO.2 ). Например, разрешение POSIX может быть установлено на существующий файл
setPosixFilePermissions()
, или атомарном при создании файла с методами , какcreateFile()
илиnewByteChannel()
.Вы можете создать набор разрешений, используя
EnumSet.of()
, но вспомогательный методPosixFilePermissions.fromString()
будет использовать обычный формат, который будет более читабельным для многих разработчиков. Для API, которые принимают aFileAttribute
, вы можете заключить набор разрешений вPosixFilePermissions.asFileAttribute()
.В более ранних версиях Java
exec
распространенным подходом является использование собственного нативного кода или утилит командной строки -ing.источник
В дополнение к предложениям Эриксона есть также jna , которая позволяет вам вызывать собственные библиотеки без использования jni. Он потрясающе прост в использовании, и я успешно использовал его в нескольких проектах.
Единственное предостережение - это медленнее, чем jni, поэтому, если вы делаете это с очень большим количеством файлов, это может быть проблемой для вас.
(Редактирование для добавления примера)
Вот полный пример jna chmod:
источник
До Java 6 не было поддержки обновления прав доступа к файлам на уровне Java. Вы должны реализовать свой собственный собственный метод или вызвать
Runtime.exec()
команду уровня ОС, такую как chmod .Начиная с Java 6, вы можете использовать
File.setReadable()/File.setWritable()/File.setExecutable()
для установки прав доступа к файлам. Но он не имитирует файловую систему POSIX, которая позволяет устанавливать разрешения для разных пользователей. File.setXXX () позволяет установить разрешение только для владельца и всех остальных.Начиная с Java 7, вводятся права доступа к файлам POSIX. Вы можете установить права доступа к файлам, как в системах * nix. Синтаксис:
Этот метод можно использовать только в файловой системе POSIX, это означает, что вы не можете вызывать его в системе Windows.
Для получения подробной информации об управлении разрешениями файлов, рекомендуем вам прочитать этот пост .
источник
для windows 7 с nio 2.0:
источник
Если вы хотите установить разрешение 777 для созданного файла, вы можете использовать следующий метод:
источник
Просто чтобы обновить этот ответ, если кто-нибудь не столкнется с этим позже, поскольку JDK 6 вы можете использовать
вы можете найти документацию по Oracle File (Java Platform SE 7) . Имейте в виду, что эти команды работают только в том случае, если текущий рабочий пользователь имеет право собственности или права записи в этот файл. Я знаю, что OP хотел получить доступ к типу chmod для более сложной конфигурации пользователя. они установят опцию для всех пользователей.
источник
Вы можете использовать методы класса File: http://docs.oracle.com/javase/7/docs/api/java/io/File.html
источник
для Oralce Java 6:
работает под Solaris / linux.
источник
FileSystemPreferences
потокTimer
демона распространяется после его загрузки. он также добавляет ловушку выключения, но для некоторых приложений это может быть проблематично.Apache ant chmod (не очень элегантный, добавлен для полноты) предоставлен @msorsky
источник
Ссылка: как изменить разрешение файла в java
источник
В Oracle Docs есть пример класса, который очень похож на chmod UNIX. Однако он работает с Java SE 7+.
источник
источник