Ich erstelle einen Ordner in meinem Java-Programm (unter Linux) mit mkdirs() -Funktion des Dateiobjekts. Das Problem besteht darin, dass der Ordner nur Leseberechtigungen für die Gruppe erhält. Ich brauche auch Schreibberechtigungen (um die Dateien später löschen zu können). Wie soll es gemacht werden?Erstellen Sie ein Verzeichnis mit Schreibberechtigungen für die Gruppe
Antwort
In Java 6 gibt es Methoden, die das ermöglichen, wie setwriteable(). Bei früheren Versionen von Java müssen Sie auf die Befehlszeile zugreifen, um einen Befehl chmod auszuführen.
EDIT: Woops, bin ich völlig falsch; Ich habe nicht bemerkt, dass Sie speziell Gruppenberechtigungen haben wollten. Diese scheinen ohne Runtime.exec() nicht einstellbar zu sein.
@David: Sie haben Recht.
Ein weiterer Gedanke: Wenn Sie viele Dateien ändern müssen, wie wäre es mit dem Schreiben eines Shell-Skripts und dem Aufruf von runtime.exec()?
Ich vermute (es sei denn, bis jemand eine gegenteilige Antwort schreibt), dass es keine Möglichkeit gibt, dies in der Standardbibliothek von Java zu tun, da die POSIX-Gruppenberechtigungen (die Art von rwxrwxrwx, an die Sie gewöhnt sind) nicht plattformübergreifend sind. In Java 6 können Sie Besitzerberechtigungen oder globale Berechtigungen festlegen, aber (soweit ich das beurteilen kann) keine Gruppenberechtigungen. Wenn Sie es wirklich tun müssen, versuchen Sie es mit Runtime.exec("chmod g+w directory")
, aber es könnte eine gute Idee sein, es stilistisch in eine Methode wie setGroupWritable()
zu verpacken.
OK, das ist keine Java-Lösung und definitiv nicht tragbar.
Da Sie erwähnen, dass Sie Linux sind, können Sie wahrscheinlich die "umask" -Einstellungen überprüfen und entsprechend einstellen (um Verzeichnisse mit Gruppenschreibberechtigungen erstellen zu lassen) und dann Ihr Java-Programm starten.
Java nio mit POSIX-Datei helfen Attribute: 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));
Eine sehr einfache Lösung dafür ist:
file.setExecutable(true, false);
file.setReadable(true, false);
file.setWritable(true, false);
In obigen Code-Datei ist ein File-Objekt.
Wenn Sie eine Datei erstellen, setzen Sie diese Berechtigungen auf eine Datei setExecutable(true)
können Sie diese Datei als Executable
nur für Besitzer festlegen. Wenn Sie einen weiteren Parameter hinzufügen, den ich oben hinzugefügt habe, wird file.setExecutable(true, false);
Executable
false
nur für Besitzer machen, das bedeutet, dass er Berechtigungen für alle Gruppen/Welten setzt.
Getestet und funktioniert unter Debian und Windows XP.
eine bessere Lösung ist Java nio verwenden, weil diese Lösung Berechtigungen nur für einen Besitzer oder für alle setzt. – Nurlan
Das funktioniert nicht für mich. Ich habe versucht, dir unter Stammordner (auf Linux) mit Java-Anwendung (Benutzer Tomcat) zu erstellen, aber es scheitern, auch wenn ich verwenden 'if (! RootFile.canWrite()) { rootFile.setWritable (true, true); } ' scheint mir, dass tomcat Benutzer die Berechtigung für Verzeichnis/Dateien nicht ändern kann – pikimota
- 1. Schreibberechtigungen für ein Programm geben
- 2. So erstellen Sie ein Verzeichnis mit Nerdtree
- 3. Erstellen Sie ein temporäres Verzeichnis in Haskell
- 4. PowerShell-Variable für ein Verzeichnis erstellen
- 5. Ermitteln von Schreibberechtigungen für den Anwendungsordner
- 6. So erstellen Sie ein Verzeichnis in% appdata%
- 7. move_uploaded_file So erstellen Sie ein Upload-Verzeichnis
- 8. Verzeichnis für imgs erstellen
- 9. Erstellen Sie ein Verzeichnis im iPhone
- 10. Erstellen Sie ein Array mit Dateinamen in einem Verzeichnis
- 11. Erstellen Sie ein Verzeichnis mit UTF-8-Namen in Vim
- 12. Lese-/Schreibberechtigungen für einen Dateideskriptor ändern
- 13. Schreibberechtigungen für alle Benutzer für meinen Programmordner festlegen
- 14. Verzeichnis erstellen mit Nant
- 15. Erstellen Sie ein Verzeichnis und kopieren Sie eine Datei
- 16. Zugriffsberechtigungen für eine ganze Gruppe in einem Verzeichnis festlegen
- 17. Erstellen Sie ein Verzeichnis auf UNC Pfad Webpart Sharepoint
- 18. Erstellen Sie ein benutzerdefiniertes Verzeichnis auf PHP über .net
- 19. Kopieren Sie ein ganzes Verzeichnis mit Phing
- 20. für jedes Verzeichnis erstellen Sie eine TAR-Datei
- 21. So löschen Sie ein bestehendes Verzeichnis - RUBY Installfest erstellen App
- 22. Wo sollte ich ein Verzeichnis für nodejs Apps erstellen?
- 23. Kopieren Sie die Datei in ein Verzeichnis mit Python
- 24. Erstellen Sie eine Gruppe von Elementen JointJS
- 25. Gruppe mit Telegram-API erstellen
- 26. Wie behebe ich die Fehlermeldung "Sie haben keine Schreibberechtigungen in das Verzeichnis/usr/bin" bei der Installation von Rails?
- 27. So kopieren Sie ein Verzeichnis mit Ant
- 28. Kopieren Sie ein Verzeichnis mit NSIS.
- 29. In Django, wie programmgesteuert erstellen Sie eine Gruppe mit Berechtigungen
- 30. CMein Build-Verzeichnis für mehrere Projekte erstellen
Es ist nicht nett, aber macht die Arbeit. Nur für Kopieren/Einfügen: Es muss Runtime.getRuntime.exec sein ("chmod g + w Verzeichnis") – schoenk