2009-02-19 8 views

Antwort

-1

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.

Java 6 SE File Class Doc.

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()?

1

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.

+0

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

0

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.

16

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);Executablefalse nur für Besitzer machen, das bedeutet, dass er Berechtigungen für alle Gruppen/Welten setzt.

Getestet und funktioniert unter Debian und Windows XP.

+2

eine bessere Lösung ist Java nio verwenden, weil diese Lösung Berechtigungen nur für einen Besitzer oder für alle setzt. – Nurlan

+0

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

Verwandte Themen