Christian Seiler: Das System kann die Datei nicht finden

Beitrag lesen

Hallo,

Die Datei soll plausible Daten (Highscore) beinhalten. Die ist für alle Benutzer gleich. Also ich denke, die soll einem Programmverzechnis liegen, z.B. save/bestenliste.txt

Nunja, dann ist die Frage: Wie bekommst Du das "Programmverzeichnis" heraus? Ich halte das für eine ziemlich nichttriviale Aufgabe.

Im Prinzip müsstest Du den kompletten Classpath durchgehen und dort dann jeweils nach Deiner Klasse suchen. Wenn der Eintrag des Classpath ein Verzeichnis ist, dann suchst Du dort nach Deiner Klasse (im richtigen Unterverzeichnis). Existiert diese, dann ist dieser Eintrag Deines Classpaths Dein Programmverzeichnis. Wenn der Eintrag des Classpaths eine *.jar-Datei ist, dann suchst Du, ob innerhalb diese *.jar-Datei Deine Klasse ist. Wenn dies der Fall ist, ist das Verzeichnis, das die *.jar-Datei enthält, Dein Programmverzeichnis. Und wenn Du Deine Klasse gar nicht findest (weil z.B. der Classpath inzwischen geändert wurde), dann bist Du ziemlich aufgeschmissen.

Dein Problem ist, dass Java das Konzept "Programmverzeichnis" in der Form nicht kennt. Das Java-Konzept sieht sowas nämlich nicht vor. Mit Java kannst Du nämlich durchaus ganz einfach sowas machen wie

java -jar /pfad/zur/jar/des/programms.jar

und damit ein Programm ausführen - das Programm wäre dann komplett in dieser .jar-Datei enthalten. Diese .jar-Datei könnte zusammen in einem Verzeichnis mit lauter anderen .jars liegen, die nichts mit dem Programm zu tun haben und andere Programme enthalten. Dann gäbe es gar kein Programmverzeichnis oder höchstens eins, das von allen geteilt wird.

Am sinnvollsten wäre es doch, das Verzeichnis für die Highscores wäre irgendwie konfigurierbar. Wenn Du Dein Programm irgendwo installierst, dann starten die User das ja sicher nicht über java .... auf der Kommandozeile, sondern über etwas anderes - unter Windows eine Batch-Datei, unter Linux ein Shell-Script etc. Wenn Du nun die Batch-Datei / das Shell-Script erkennen könnten, in welchem Verzeichnis sie sich befinden (bzw. das müssen sie ja sowieso, um den Classpath korrekt zu setzen, wenn sie java korrekt aufrufen wollen) können sie beim Aufruf des Java-Interpreters PROBLEMLOS auch übergeben (z.B. per Umgebungsvariable), welches Verzeichnis das ist, so dass Dein Programm das Programmverzeichnis kennt. Und in Deiner Entwicklungsumgebung kannst Du Eclipse sicher so konfigurieren, dass dort die Umgebungsvariable auf ein Testverzeichnis gesetzt wird. Das wäre in meinen Augen die sinnvollste Lösung.

Viele Grüße,
Christian