In Java erstelle ich dynamisch eine Reihe von Dateien und möchte die Dateiberechtigungen für diese Dateien in einem Linux / Unix-Dateisystem ändern. Ich möchte in der Lage sein, das Java-Äquivalent von auszuführen chmod
. Ist das möglich Java 5? Wenn das so ist, wie?
Ich weiß, dass das File
Objekt in Java 6 setReadable()
/ setWritable()
Methoden hat. Ich weiß auch, dass ich dazu einen Systemaufruf tätigen könnte, aber ich möchte dies nach Möglichkeit vermeiden.
java
filesystems
Roy Rico
quelle
quelle
Files.setPosixFilePermissions(path, PosixFilePermissions.fromString("rwxr-x---"))
Antworten:
Die vollständige Kontrolle über Dateiattribute ist in Java 7 als Teil der "neuen" neuen E / A-Funktion ( NIO.2 ) verfügbar . Zum Beispiel können POSIX - Berechtigungen auf eine Datei festgelegt werden mit
setPosixFilePermissions()
, oder atomar bei Dateierstellung mit Methoden wiecreateFile()
odernewByteChannel()
.Sie können eine Reihe von Berechtigungen mit erstellen
EnumSet.of()
, die HilfsmethodePosixFilePermissions.fromString()
verwendet jedoch ein herkömmliches Format, das für viele Entwickler besser lesbar ist. Für APIs, die a akzeptierenFileAttribute
, können Sie den Berechtigungssatz mit umschließenPosixFilePermissions.asFileAttribute()
.In früheren Versionen von Java sind die Verwendung von nativem Code oder
exec
Befehlszeilenprogrammen von -ing gängige Ansätze.quelle
Zusätzlich zu den Vorschlägen von erickson gibt es auch jna , mit dem Sie native Bibliotheken aufrufen können, ohne jni zu verwenden. Es ist schockierend einfach zu bedienen und ich habe es bei einigen Projekten mit großem Erfolg eingesetzt.
Die einzige Einschränkung ist, dass es langsamer als jni ist. Wenn Sie dies also mit einer sehr großen Anzahl von Dateien tun, kann dies ein Problem für Sie sein.
(Bearbeiten, um ein Beispiel hinzuzufügen)
Hier ist ein vollständiges Beispiel für jna chmod:
quelle
Vor Java 6 wird die Aktualisierung von Dateiberechtigungen auf Java-Ebene nicht unterstützt. Sie müssen Ihre eigene native Methode oder Ihren eigenen Aufruf implementieren
Runtime.exec()
, um Befehle auf Betriebssystemebene wie chmod auszuführen .Ab Java 6 können Sie
File.setReadable()/File.setWritable()/File.setExecutable()
Dateiberechtigungen festlegen. Das POSIX-Dateisystem, mit dem Berechtigungen für verschiedene Benutzer festgelegt werden können, wird jedoch nicht simuliert. Mit File.setXXX () können nur Berechtigungen für den Eigentümer und alle anderen festgelegt werden.Ab Java 7 wird die POSIX-Dateiberechtigung eingeführt. Sie können Dateiberechtigungen festlegen, wie Sie sie auf * nix-Systemen ausgeführt haben. Die Syntax lautet:
Diese Methode kann nur im POSIX-Dateisystem verwendet werden. Dies bedeutet, dass Sie sie nicht im Windows-System aufrufen können.
Für Details zur Verwaltung von Dateiberechtigungen empfehlen wir Ihnen, diesen Beitrag zu lesen .
quelle
für Windows 7 mit nio 2.0:
quelle
Wenn Sie die 777-Berechtigung für Ihre erstellte Datei festlegen möchten, können Sie die folgende Methode verwenden:
quelle
Nur um diese Antwort zu aktualisieren, es sei denn, jemand stößt später darauf, da Sie JDK 6 verwenden können
Sie finden die Dokumentation zu Oracle File (Java Platform SE 7) . Beachten Sie, dass diese Befehle nur funktionieren, wenn der aktuell arbeitende Benutzer Eigentümer oder Schreibzugriff auf diese Datei ist. Mir ist bekannt, dass OP einen Zugriff vom Typ chmod für eine komplexere Benutzerkonfiguration wünschte. Dadurch wird die Option für alle Benutzer allgemein festgelegt.
quelle
Sie können die Methoden der File-Klasse verwenden: http://docs.oracle.com/javase/7/docs/api/java/io/File.html
quelle
für Oralce Java 6:
funktioniert unter solaris / linux.
quelle
FileSystemPreferences
einTimer
Daemon-Thread nach dem Laden spwans . Es wird auch ein Shutdown-Hook hinzugefügt, aber für einige Anwendungen kann dies immer noch problematisch sein.Apache ant chmod (nicht sehr elegant, der Vollständigkeit halber hinzugefügt) Kredit mit @msorsky geteilt
quelle
Referenz: So ändern Sie die Dateiberechtigung in Java
quelle
Es gibt eine Beispielklasse für Oracle Docs, die dem UNIX-chmod sehr ähnlich ist. Es funktioniert jedoch mit Java Se 7+.
quelle