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
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.
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()?
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()
.
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.
Java NIO può aiutare con il file POSIX attributi: 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));
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 Executable
false
solo per il proprietario, il che significa che imposterà le autorizzazioni a tutto il gruppo/mondo.
Testato e funzionante su Debian e Windows XP.
una soluzione migliore sta usando java nio perché questa soluzione imposta le autorizzazioni solo per un proprietario o per tutti. – Nurlan
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
- 1. Come posso creare un file con file_put_contents con permessi di scrittura di gruppo?
- 2. permessi Symfony2 Gruppo con ACL
- 3. Permessi per directory su git
- 4. Gemfile.lock errore di scrittura, permessi?
- 5. Come si imposta una directory per disporre di permessi di gruppo persistenti?
- 6. Paperclip crea una cartella con permessi errati
- 7. Python - Verifica permessi directory
- 8. Tastypie - Consenti permessi di sola lettura per gli utenti non autenticati lasciando permessi di scrittura autorizzati
- 9. Non hai permessi di scrittura per la directory /var/lib/gems/2.3.0
- 10. permessi errati impostati sulla directory appena creata
- 11. I permessi dei file non ereditano i permessi delle directory
- 12. Modifica permessi di lettura/scrittura su un descrittore di file
- 13. Crea gruppo per Google Play tester Alpha
- 14. Crea un file vuoto per la scrittura?
- 15. Come ottenere i permessi di scrittura del registro in C#
- 16. Crea directory + sottodirectory
- 17. Crea directory se non esiste con Ruby
- 18. Crea directory utilizzando Nant
- 19. Gruppi di utenti e permessi
- 20. Python: il file di scrittura nella directory non esiste
- 21. LINQ - Scrittura di un metodo di estensione per ottenere la riga con il valore massimo per ogni gruppo
- 22. Ottenere risultato $ gruppo con il gruppo conta
- 23. Permessi SQL Server su Processi memorizzati con SQL dinamico
- 24. fopen Crea file, ma come modificare i permessi?
- 25. I permessi di gruppo e proprietario sono errati quando php carica i file
- 26. Crea directory se non esiste
- 27. Django - permessi utente per certe viste?
- 28. admin django - permessi di gruppo per modificare o visualizzare i modelli
- 29. Crea file nella directory di progetto con plug-in archetype
- 30. permessi dei file mkfifo non essere eseguiti correttamente
Non è bello, ma funziona. Solo per Copia/Incolla: Deve essere Runtime.getRuntime.exec ("chmod g + w directory") – schoenk