Ich muss eine externe XML-Datei aus meiner Java-Anwendung in einer ausführbaren Jar-Datei lesen.
Wenn ich es von der Konsole aus lade (java -jar package.jar), funktioniert es gut, aber wenn ich es per Doppelklick lade (Java Platform SE Binary), funktioniert es nicht.
Ich habe dieses Problem mit dem relativen Pfad. Mit dem absoluten Pfad funktioniert es auf beide Arten.
Antworten
Zu viele Anzeigen?Sie müssen den (JAR-relativen) Pfad zu der XML-Kachel in die Datei Class-Path
Eintrag im MANIFEST.MF
Datei. Dieser Eintrag enthält Informationen über den Laufzeitklassenpfad des JARs. Unter der Annahme, dass Sie die XML-Datei im gleichen Ordner wie die JAR-Datei selbst haben möchten, reicht Folgendes aus:
Class-Path: .
(Vergessen Sie nicht, eine Leerzeile am Ende von MANIFEST.MF
Datei)
Dann können Sie sie als Klassenpfad-Ressource erhalten, indem Sie Class#getResource()
o ClassLoader#getResource()
. In Ihrem Fall reicht die erste Variante aus.
URL xmlResource = getClass().getResource("/filename.xml");
File xmlFile = new File(xmlResource.getPath());
// ...
Versuchen Sie dies: Ermittlung des relativen Pfads außerhalb des ausführbaren JAR
Es ist schwer, eine genaue Antwort zu geben, ohne zu wissen, welches Betriebssystem Sie verwenden.
Die allgemeine Antwort wäre, den Launcher (das Symbol auf dem Desktop) so zu ändern, dass das anfängliche Arbeitsverzeichnis dasselbe ist wie das, das Sie verwenden, wenn Sie den Befehl von einer Shell aus ausführen.