En Java, estoy creando dinámicamente un conjunto de archivos y me gustaría cambiar los permisos de archivo en estos archivos en un sistema de archivos linux / unix. Me gustaría poder ejecutar el equivalente en Java de chmod
. ¿Es eso posible Java 5? ¿Si es así, cómo?
Sé que en Java 6 el File
objeto tiene setReadable()
/ setWritable()
métodos. También sé que podría hacer una llamada al sistema para hacer esto, pero me gustaría evitarlo si es posible.
java
filesystems
Roy Rico
fuente
fuente
Files.setPosixFilePermissions(path, PosixFilePermissions.fromString("rwxr-x---"))
Respuestas:
El control total sobre los atributos del archivo está disponible en Java 7, como parte de la "nueva" función New IO ( NIO.2 ). Por ejemplo, los permisos POSIX se pueden establecer en un archivo existente con
setPosixFilePermissions()
, o de forma atómica en la creación del archivo con métodos comocreateFile()
onewByteChannel()
.Puede crear un conjunto de permisos utilizando
EnumSet.of()
, pero el método auxiliarPosixFilePermissions.fromString()
utilizará un formato convencional que será más legible para muchos desarrolladores. Para las API que aceptan aFileAttribute
, puede ajustar el conjunto de permisos con conPosixFilePermissions.asFileAttribute()
.En versiones anteriores de Java, el uso de su propio código nativo o las
exec
utilidades de línea de comandos -ing son enfoques comunes.fuente
Además de las sugerencias de erickson, también existe jna , que le permite llamar a bibliotecas nativas sin usar jni. Es sorprendentemente fácil de usar y lo he usado en un par de proyectos con gran éxito.
La única advertencia es que es más lento que jni, por lo que si está haciendo esto con una gran cantidad de archivos, puede ser un problema para usted.
(Edición para agregar ejemplo)
Aquí hay un ejemplo completo de jna chmod:
fuente
Antes de Java 6, no se admite la actualización de permisos de archivos a nivel de Java. Debe implementar su propio método nativo o llamar
Runtime.exec()
para ejecutar un comando de nivel de sistema operativo como chmod .A partir de Java 6, puede utilizar
File.setReadable()/File.setWritable()/File.setExecutable()
para establecer permisos de archivo. Pero no simula el sistema de archivos POSIX que permite establecer permisos para diferentes usuarios. File.setXXX () solo permite establecer permisos para el propietario y todos los demás.A partir de Java 7, se introduce el permiso de archivo POSIX. Puede establecer permisos de archivo como lo ha hecho en los sistemas * nix. La sintaxis es:
Este método solo se puede usar en el sistema de archivos POSIX, esto significa que no puede llamarlo en el sistema Windows.
Para obtener detalles sobre la administración de permisos de archivos, le recomendamos que lea esta publicación .
fuente
para windows 7 con nio 2.0:
fuente
Si desea establecer el permiso 777 para su archivo creado, puede usar el siguiente método:
fuente
Solo para actualizar esta respuesta a menos que alguien se encuentre con esto más adelante, ya que JDK 6 puede usar
puede encontrar la documentación en Oracle File (Java Platform SE 7) . Tenga en cuenta que estos comandos solo funcionan si el usuario actual tiene la propiedad o acceso de escritura a ese archivo. Soy consciente de que OP quería acceso de tipo chmod para una configuración de usuario más compleja. estos establecerán la opción en todos los ámbitos para todos los usuarios.
fuente
Puede utilizar los métodos de la clase File: http://docs.oracle.com/javase/7/docs/api/java/io/File.html
fuente
para Oralce Java 6:
funciona bajo solaris / linux.
fuente
FileSystemPreferences
lanza unTimer
hilo de demonio una vez que está cargado. también agrega un gancho de apagado, pero para algunas aplicaciones esto puede resultar problemático.Apache ant chmod (no muy elegante, agregándolo para completar) crédito compartido con @msorsky
fuente
Referencia: cómo cambiar el permiso del archivo en java
fuente
Hay una clase de ejemplo en Oracle Docs que funciona de manera muy similar al chmod de UNIX. Sin embargo, funciona con java se 7+.
fuente
fuente