Ich möchte der Bilddatei den Berechtigungsmoduswert "777" mit Java-Code geben. Wie kann ich das mit Java geben? Weil ich das Bild mit dem Standardberechtigungsmodus "664" nicht löschen kann.
Sie können dann ein Datei -Objekt erstellen, das mit der Datei verknüpft ist Ändern Sie die Berechtigungen mithilfe von setExecutable , < a href="http://java.sun.com/javase/6/docs/api/java/io/File.html#setReadable(boolean,%20boolean)"> setReadable und setWritable . Natürlich werden diese Operationen fehlschlagen, wenn Ihr Programm nicht berechtigt ist, Zugriffsberechtigungen für die Datei zu ändern.
Es ist ein Teil des NIO-Pakets. Sie können dies über java.nio.file.attribute tun .PosixFilePermission .
Dies ist nur in Java 1.7 obwohl es ein bekanntes Problem seit einiger Zeit.
Sie können dann ein Datei -Objekt erstellen, das mit der Datei verknüpft ist Ändern Sie die Berechtigungen mithilfe von setExecutable , < a href="http://java.sun.com/javase/6/docs/api/java/io/File.html#setReadable(boolean,%20boolean)"> setReadable und setWritable . Natürlich werden diese Operationen fehlschlagen, wenn Ihr Programm nicht berechtigt ist, Zugriffsberechtigungen für die Datei zu ändern.
Leider gibt Java den System-Dateieigenschaften nur wenig Spielraum, weil es die goldene Regel von Java brechen würde: "Einmal schreiben, überall laufen".
Wenn Sie schreiben, dass Sie einen 777-Zugriff auf die Datei haben wollen, bedeutet das natürlich, dass Sie unter Unix stehen. Aber was hätte eine solche Anfrage unter Windows beispielsweise bedeutet?
Es sollte also keine Überraschung sein, dass Sie bestimmte Funktionen des Betriebssystems verwenden müssen, um bestimmte Themen zu behandeln. Das ist der Preis, den man zahlen muss, wenn man eine Sprache benutzt, die (mit starken Gründen) "plattformunabhängig" ist.
Der sicherste Weg wäre die Verwendung einer JNI-Bibliothek, die genau das implementiert, was Sie wollen. Eine einfache, aber schmutzige und gefährliche Art wäre die Verwendung einer Runtime.getRuntime (). Exec ("chmod 777 myFile").
Warum gefährlich? In der Tat, was passiert, wenn man einen solchen Exec ("Blahblah") nennt?
Der Unix-Prozess, der Ihr Java-Programm ausführt, gabelt sich; der "duplizierte" Prozess führt dann eine Shell aus (ksh? csh? bash ?? es hängt von Ihrer Unix-Konfiguration ab), die versucht, Ihren "blahblah" -Satz zu verstehen und auszuführen.
Wenn Ihr jvm tatsächlich 500 MB verwendet, hat der gegabelte Prozess die gleiche Größe, wenn er gestartet wird ...
Dann beginnt die Shell mit dem gleichen "Shell-Kontext" wie der Java-Prozess, also der gleiche PATH, Aliase und so weiter. Selbst "chmod" könnte Alias sein, also wäre es besser, den vollständigen Pfad für chmod aufzurufen (/ bin / chmod, / usr / bin / chmod ... es hängt vom Unix-Geschmack ab ...).
>Während der Shell-Ausführung ist Ihr Java-Programm eingefroren, und Sie haben keine Möglichkeit, es wieder aufzutauen, wenn die Shell aus irgendeinem Grund hängen bleibt.
Und schließlich ist es nicht einmal sicher, ob der UNIX-Besitzer des Java-Programms über ausreichende Rechte verfügt, um solche Informationen in der Datei zu ändern (er könnte die Datei erstellen, aber zum Beispiel nicht die Rechte auf Benutzerebene ändern) / p>
Vielleicht versuchen Sie, auf Java-Ebene ein Problem zu behandeln, das auf Betriebssystemebene behoben werden sollte?
Hier geht der Code: -
%Vor%Ich möchte der Bilddatei den Berechtigungsmoduswert "777" mit Java-Code geben. Wie kann ich das mit Java geben? Weil ich das Bild mit dem Standardberechtigungsmodus "664" nicht löschen kann.
Es ist ein Teil des NIO-Pakets. Sie können dies über java.nio.file.attribute tun .PosixFilePermission .
Dies ist nur in Java 1.7 obwohl es ein bekanntes Problem seit einiger Zeit.
Leider gibt Java den System-Dateieigenschaften nur wenig Spielraum, weil es die goldene Regel von Java brechen würde: "Einmal schreiben, überall laufen".
Wenn Sie schreiben, dass Sie einen 777-Zugriff auf die Datei haben wollen, bedeutet das natürlich, dass Sie unter Unix stehen. Aber was hätte eine solche Anfrage unter Windows beispielsweise bedeutet?
Es sollte also keine Überraschung sein, dass Sie bestimmte Funktionen des Betriebssystems verwenden müssen, um bestimmte Themen zu behandeln. Das ist der Preis, den man zahlen muss, wenn man eine Sprache benutzt, die (mit starken Gründen) "plattformunabhängig" ist.
Der sicherste Weg wäre die Verwendung einer JNI-Bibliothek, die genau das implementiert, was Sie wollen. Eine einfache, aber schmutzige und gefährliche Art wäre die Verwendung einer Runtime.getRuntime (). Exec ("chmod 777 myFile").
Warum gefährlich? In der Tat, was passiert, wenn man einen solchen Exec ("Blahblah") nennt?
Der Unix-Prozess, der Ihr Java-Programm ausführt, gabelt sich; der "duplizierte" Prozess führt dann eine Shell aus (ksh? csh? bash ?? es hängt von Ihrer Unix-Konfiguration ab), die versucht, Ihren "blahblah" -Satz zu verstehen und auszuführen.
Wenn Ihr jvm tatsächlich 500 MB verwendet, hat der gegabelte Prozess die gleiche Größe, wenn er gestartet wird ...
Dann beginnt die Shell mit dem gleichen "Shell-Kontext" wie der Java-Prozess, also der gleiche PATH, Aliase und so weiter. Selbst "chmod" könnte Alias sein, also wäre es besser, den vollständigen Pfad für chmod aufzurufen (/ bin / chmod, / usr / bin / chmod ... es hängt vom Unix-Geschmack ab ...).
>Während der Shell-Ausführung ist Ihr Java-Programm eingefroren, und Sie haben keine Möglichkeit, es wieder aufzutauen, wenn die Shell aus irgendeinem Grund hängen bleibt.
Und schließlich ist es nicht einmal sicher, ob der UNIX-Besitzer des Java-Programms über ausreichende Rechte verfügt, um solche Informationen in der Datei zu ändern (er könnte die Datei erstellen, aber zum Beispiel nicht die Rechte auf Benutzerebene ändern) / p>
Vielleicht versuchen Sie, auf Java-Ebene ein Problem zu behandeln, das auf Betriebssystemebene behoben werden sollte?