Wie erfahre ich den Programmnamen (des ausgeführten Programms) und das Verzeichnis, in dem es sich befindet?
Die einfachste Lösung schien zu sein, den String unterSystem.getProperty("sun.java.command")
zu verarbeiten.
Nun muß ich aber herausfinden, ob die Datei die gestartet wurde, eine .class-Datei oder eine .jar-Datei ist. (Bei einer .class-Datei muß ich die Endung noch anfügen, bei einer .jar-Datei nicht).
Anfangs dachte ich, daß eine Jar-Datei immer ein “.jar” am Ende hat. Doch dann stieß ich auf Windows .exe-Dateien, die man als zip-Order öffnen kann und ebenfalls als ausführbare *.jar-Dateien diesen.
Besonders schlimm wird z.B. folgendes unter Windows:
Ich starte das Programm unter C:\ mit
java -jar "Dokumente und Einstellungen\User\uu\TheProgram\TheProgram.exe" hzu\fe\dffw wffe/wdwd/dw /? fwfe
und System.getProperty(“sun.java.command”) gibt mir dann folgendes aus:
Dokumente und Einstellungen\User\uu\TheProgram\TheProgram.exe hzu\fe\dffw wffe/wdwd/dw /? fwfe
(also ohne die Anführunszeichen, die lediglich die Eingabeaufforderung für ihre Verarbeitung brauchte).
Splitte ich nach Leerzeichen, dann erhalte ich mitten im String-Array ein unnützes “Einstellungen\User\uu\TheProgram\TheProgram.exe”.
Splitte ich nach System.getProperty(“file.separator”) (unter Windows ist es Backslash), dann erhalte ich mitten im String-Array ein ebenso unnützes “TheProgram.exe hzu”.
Und wenn mein Programm nicht “TheProgram.exe” heißt, sondern “The Pr.o.gram.exe”, dann wird das Problem noch etwas größer.
Mit anderen Worten:
System.getProperty(“sun.java.command”) ist nicht zu gebrauchen, um den Programmnamen und das Verzeichnis in dem es sich befindet auszulesen.
Die Methode, die das aufgerufene Programm und separat das Verzeichnis, indem es sich befindet, anzeigen soll, ist in einer externen Bibliothek.
Das heißt, das Verzeichnis dieser Bibliothek und das des aufgerufenen Programms, ist nicht immer das selbe.
Somit hilft auch etwas wiegetClass().getProtectionDomain().getCodeSource().getLocation().toURI().getPath()
nicht gerade weiter, da es dann bloß das Verzeichnis der Bibliothek anzeigt.
Gibt es somit irgendeine Möglichkeit den Namen des ausgeführten Programms auszulesen? Und separat das Verzeichnis auszulesen, in dem sich das Programm befindet?
Grüße
theuserbl