Wie ändere ich den Bildrechte-Modus mit Java-Code auf 777?

8

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.

    
Bill the Lizard 12.06.2009, 14:10
quelle

5 Antworten

8

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.

    
Bill the Lizard 12.06.2009 14:18
quelle
8
___ qstnhdr ___ Wie ändere ich den Bildrechte-Modus mit Java-Code auf 777? ___ answer986844 ___

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.

    
___ answer986874 ___

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.

    
___ answer987327 ___

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?

    
___ tag123java ___ Java (nicht zu verwechseln mit JavaScript oder JScript oder JS) ist eine universelle objektorientierte Programmiersprache, die für die Verwendung in Verbindung mit der Java Virtual Machine (JVM) entwickelt wurde. "Java-Plattform" ist der Name für ein Computersystem, auf dem Tools zum Entwickeln und Ausführen von Java-Programmen installiert sind. Verwenden Sie dieses Tag für Fragen, die sich auf die Java-Programmiersprache oder Java-Plattform-Tools beziehen. ___ answer4497084 ___

Hier geht der Code: -

%Vor%     
___ qstntxt ___

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.

    
___ tag123nio ___ NIO ist Java 'New I / O' eingeführt in 1.4, bietet nicht-blockierende und gemultiplexte Netzwerk-I / O; 'direkte' (native) Puffer; Dateisperren und zugeordnete Dateien; und Zeichensatz-Codecs. ___
Kieveli 12.06.2009 14:13
quelle
3

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.

    
z - 12.06.2009 14:13
quelle
1

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?

    
Michael Zilbermann 12.06.2009 15:32
quelle
1

Hier geht der Code: -

%Vor%     
A_Var 21.12.2010 07:28
quelle

Tags und Links