2009-02-19 11 views
10

Creo una cartella nel mio programma java (in esecuzione su linux) con la funzione mkdirs() dell'oggetto File. Il problema è che la cartella riceve solo le autorizzazioni di lettura per il gruppo. Ho bisogno che abbia anche i permessi di scrittura (per poter cancellare i suoi file in seguito). Qual è il modo di farlo?Crea directory con permessi di scrittura per il gruppo

risposta

-1

Su java 6, esistono metodi che consentono di eseguire questa operazione, ad esempio setwriteable(). Nelle versioni precedenti di java, dovrai accedere alla riga di comando per eseguire un comando chmod.

Java 6 SE File Class Doc.

EDIT: Woops, io sono completamente sbagliato; Non sono riuscito a notare che volevi permessi di gruppo in particolare. Quelle non sembrano essere settabili senza Runtime.exec().

@David: hai ragione.

Un altro pensiero: se hai molti file da cambiare, che ne dici di scrivere uno script di shell e chiamarlo da runtime.exec()?

1

Sospetto (a meno che/finché qualcuno non invii una risposta in contrario) che non c'è modo di farlo nella libreria standard di Java, poiché le autorizzazioni del gruppo POSIX (il tipo rwxrwxrwx a cui sei abituato) non sono multipiattaforma. Java 6 ti consente di impostare le autorizzazioni del proprietario o le autorizzazioni globali, ma (per quanto posso dire) non le autorizzazioni di gruppo. Se proprio devi farlo, prova a usare Runtime.exec("chmod g+w directory"), ma potrebbe essere una buona idea stilisticamente avvolgerlo in un metodo come setGroupWritable().

+0

Non è bello, ma funziona. Solo per Copia/Incolla: Deve essere Runtime.getRuntime.exec ("chmod g + w directory") – schoenk

0

OK questa non è una soluzione java e sicuramente non portatile.

Dato che si parla di Linux, probabilmente si può pensare di controllare le impostazioni di "umask" e impostarle in modo appropriato (per avere directory create con permessi di scrittura di gruppo) e quindi avviare il programma java.

16

Una soluzione molto semplice per questo è:

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

Nel codice precedente, il file è un oggetto file.

Quando si crea un file, impostare queste autorizzazioni su un file setExecutable(true) consentirà di impostare tale file come Executable solo per il proprietario. Se aggiungi un altro parametro che ho aggiunto nel codice sopra file.setExecutable(true, false);, effettuerai il Executablefalse solo per il proprietario, il che significa che imposterà le autorizzazioni a tutto il gruppo/mondo.

Testato e funzionante su Debian e Windows XP.

+2

una soluzione migliore sta usando java nio perché questa soluzione imposta le autorizzazioni solo per un proprietario o per tutti. – Nurlan

+0

Questo non funziona per me. Ho provato a creare la cartella dir sotto root (su linux) con l'applicazione java (utente è tomcat) ma fallisce anche se uso 'if (! RootFile.canWrite()) { rootFile.setWritable (true, true); } mi sembra che l'utente di tomcat non possa modificare i permessi su dir/files – pikimota

Problemi correlati