Wie lassen sich in Java Dateirechte setzen? v.6.0
Leider bietet Java keine nativen Methoden, um Unix-artige Dateirechte zu
setzen. Dies ist lediglich durch JNI
oder Runtime#exec("chmod")
möglich. Gleichwohl gibt es die Möglichkeit zu definieren, ob die
Lese-, Schreib- und Ausführungsrechte eines File
-Objekte
nur für den Besitzer oder für alle gesetzt werden sollen. Die
drei Rechte werden hierbei durch jeweils eigene Methoden gesetzt, die in
der u.a. Liste aufgeführt sind.
Im Beispiel wird der Übersicht halber lediglich demonstriert, wie das
Schreiben in eine Datei für alle erlaubt wird. Es ist wichtig zu
wissen, dass das Einrichten der Rechte natürlich nur einem Nutzer
gestattet ist, der selbst die Änderungsrechte an der Datei besitzt.
Durch
die Methode createNewFile()
wird zunächst die relevate
Datei erzeugt, falls diese nicht existieren sollte1.
Durch die Methode setWritable()
werden die Schreibrechte
gesetzt. Sie verwendet zwei boolsche Parameter: Der erste setzt das Recht
selbst. Durch die Übergabe von true
werden hier also die
Schreibrechte eingeräumt. Der zweite bestimmt, ob das Recht nur dem
Dateibesitzer eingerichtet werden soll. Eine Übergabe von false
gibt hier an, dass dies nicht der Fall sein soll, somit für alle
Nutzer das Schreiben in diese Datei freigegeben wird2.
Wie
oben erwähnt existiert eine überladene Methode mit nur einem
Parameter. Sie setzt die Rechte nur für den Eigentümer der Datei
und entspricht somit einem Aufruf von setWritable(true, true)
.
Ein Setzen für die Eigentümergruppe ist auf diese Weise nicht
möglich - ein Tribut an Javas Plattformunabhängigkeit.
import java.io.File;
import java.io.IOException;
public class DateirechteSetzen {
public static void main(String[] args) {
String fileName = "/Users/karlheinzwillipeter/Desktop/test.txt";
File file = new File(fileName);
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
if(file.setWritable(true,false))
System.out.println("Dateirechte auf 666 gesetzt.");
}
}
Die folgende Liste gibt einen Überblick über die Methoden zur Änderung der Dateirechte.
- setReadable(boolean lesbar)
- setReadable(boolean lesbar, boolean nurBesitzer)
- setWritable(boolean schreibbar)
- setWritable(boolean schreibbar, boolean nurBesitzer)
- setExecutable(boolean ausfuehrbar)
- setExecutable(boolean ausfuehrbar, boolean nurBesitzer)
1) Es muss hier beachtet werden, dass zumindest das
Elternverzeichnis existiert und beschreibbar ist. Näheres hierzu siehe
unter Verzeichnis erstellen.
2) Die Rechtemaske der Ausgabe ergibt sich bei einer umask
von 0133. Neue Dateien werden also anfänglich mit den Rechten 644
erstellt.
Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.