2009-02-19 12 views
10

Creo una carpeta en mi programa java (ejecutándose en Linux) con la función mkdirs() del objeto Archivo. El problema es que la carpeta solo obtiene permisos de lectura para el grupo. Necesito que también tenga permisos de escritura (para poder eliminar sus archivos más adelante). ¿Cuál es la manera de hacerlo?Crear directorio con permisos de escritura para el grupo

Respuesta

-1

En java 6, hay métodos que le permiten hacer esto, como setwriteable(). En versiones anteriores de java, tendrás que acceder a la línea de comando para hacer un comando chmod.

Java 6 SE File Class Doc.

EDIT: Woops, estoy completamente equivocado; No me di cuenta de que querías permisos grupales específicamente. Esos no parecen configurables sin Runtime.exec().

@David: Tienes razón.

Otra idea: si tiene que modificar muchos archivos, ¿qué le parece escribir un script de shell y llamarlo desde runtime.exec()?

1

Sospecho (a menos que/hasta que alguien publique una respuesta al contrario) que no hay forma de hacerlo en la biblioteca estándar de Java, porque los permisos del grupo POSIX (el tipo rwxrwxrwx al que está acostumbrado) no son multiplataforma. Java 6 le permitirá establecer permisos de propietario o permisos globales, pero (hasta donde puedo ver) no permisos de grupo. Si realmente debe hacerlo, intente usar Runtime.exec("chmod g+w directory"), pero podría ser una buena idea estilísticamente envolverlo en un método como setGroupWritable().

+0

No es agradable, pero hace el trabajo. Solo para copiar/pegar: Tiene que ser Runtime.getRuntime.exec ("chmod g + w directory") – schoenk

0

OK esta no es una solución java y definitivamente no es portátil.

Como mencionas que eres Linux, probablemente puedas pensar en comprobar la configuración de "umask" y configurarla adecuadamente (para tener directorios creados con permisos de escritura grupales) y luego ejecutar tu programa java.

16

Una solución muy simple para esto es:

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

En el código anterior, el archivo es un objeto File.

Al crear un archivo, establezca estos permisos en un archivo setExecutable(true) y le permitirá establecer ese archivo como Executable solo para el propietario. Si agrega un parámetro más que he agregado en el código anterior, file.setExecutable(true, false); hará Executablefalse para el propietario solamente, eso significa que establecerá permisos para todo el grupo/mundo.

Probado y trabajando en Debian y Windows XP.

+2

una mejor solución es usar java nio porque esta solución establece permisos solo para un propietario o para todos. – Nurlan

+0

Esto no funciona para mí. Intenté crear dir bajo la carpeta raíz (en Linux) con la aplicación java (el usuario es Tomcat) pero falla incluso si uso 'if (! RootFile.canWrite()) { rootFile.setWritable (true, true); } ' me parece que el usuario de tomcat no puede cambiar el permiso en dir/files – pikimota

Cuestiones relacionadas