Aktueller Pfad des Programms (.jar) ermitteln

Aruhn

Mitglied
Mein fertiges JAVA-Programm hab ich nun mit eine ausführbare .jar Datei gepackt.
Dieses Programm soll nun wahllos unter jedem System unter einen beliebigen Pfad eingesetzt werden können, was soweit auch kein Problem darstellt.

Das Programm baut aber auf eine externe Textdatei auf wo Konfigurationen gespeichert werden die zum Nutzen (z.B. für die Anmeldung) zwingend benötigt wird. Nun muss ich den Pfad des Verzeichnises ermitteln wo sich die .jar befindet.

Der Aufbau ist so, die ausführbare Datei befindet sich in einem Verzeichnis (ich nenn es mal "Anwendung") und die Textdatei befindet sich in einem anderem Verzeichnis ("Doc") und die beiden Verzeichnisse befinden sich in dem Verzeichnis (Programm), welches sich widerrum sonst wo im Betriebssystem (Windows und Linux) befindet.

Der Aufhänger ist nun folgender, ich weiß nicht so richtig wie ich nun das Verzeichnis, wo sich die .jar Datei befindet ermitteln kann. :bahnhof:

Folgendes hab ich ausprobiert:
Java:
		File fi = new File("");
		String verz = fi.getAbsolutePath();

Funktioniert in der Entwicklungsumgebung wunderbar, aus der JAR-Datei heraus wird man nur das Standard Benutzerverzeichnis (in meinem Falle /home/user) angezeigt - es befindet aber in Wahrheit ein paar Verzeichnisse weiter. Korrekterweise müsste es also "/home/user/workspace/Anwendung/Programm" lauten.

Zweite Variante
[JaVA]String benutzerverz = System.getProperty("user.dir");[/code]

Das selbe wie oben.

Dritte Variante
Java:
URL url = Anmeldung.class.getResource("Anmeldung.java");
In der Entwicklungsumgebung wird der vollständige Pfad angezeigt - mit voranstehender file: Klausel.
Im entwickelten Programm wird mir dagegen "onejar:progMain:Anmeldung.java" präsentiert.

Wie kann ich nun den Pfad des Verzeichnisses ermitteln wo sich die ausführbare Datei befindet?

Über jede Hilfe und Anregung wäre ich sehr dankbar.
 

Michael...

Top Contributor
Bei meinen Anwendungen liegen solche Dateien im selben Verzeichnis wie die jar-Files oder in einem Unterverzeichnis.
Für Windowssysteme lege ich im gleichen Verzeichnis ein bat-File an, das den ClassPath auf die jars und das aktuelle Verzeichnis legt und somit kann man egal wo man dieses Verzeichnis hinkopiert immer per getResource(...) auf benötigte Dateien zugreifen.
 

Aruhn

Mitglied
Ich hab gerade festgestellt, dass das jediglich ein Problem unter meinem Linux (Ubuntu) ist.
Unter Windows funktioniert dies mit der zweiten Variante. Sogar wenn sich das Programm auf einem USB-Stick befindet, der Pfad wird korrekt bestimmt.

Das überrumpelt mich jetzt gewaltig. :bahnhof:
Warum tanzt die Anwendung bei Ubuntu so gewaltig aus der Reihe?

Das Problem ist, weshalb ich den Ordner Docs auch brauche, das im Programm z.B. PDF-Dokumente erzeugt werden die eben in diesem Ordner abgelegt werden (er ist momentan statisch und wird deshalb gebraucht).
 
Zuletzt bearbeitet:

Java-Freak

Bekanntes Mitglied
ich hab auch mal was ähnliches geschrieben wo zwar keine Einstellungen odda so gespeichert weden sondern iwelche codes in ne xml aber das prinzip dürfte das gleiche sein:
du musst nicht den absoluten pfad ermitteln sondern nur ../Programm/Doc/DateiName.txt oder ./Doc/DateiName.txt schreiben
so gings zumindest bei meim fedora
 
Zuletzt bearbeitet:

Aruhn

Mitglied
So ähnlich war ich auch schon im Vorfeld herangegangen.
Java:
String benutzerverz = System.getProperty("user.dir");
String txtPfad = benutzerverz + "/../Docs/server.txt";

War mein Gedanke aber der funktioniert so nur unter Windows (natürlich dann mit Backslash statt Slash).
Unter Linux spuckt mir System.gerProperty("user.dir") nur /home/user aus - folglich sagt mir die Stringvariable txtPfad "/home/user/../Docs/server.txt" - und sucht das ganze also nur unter /home.

Das Programm könnte sich ja auch unter /home/user/xy/xy/xy befinden - da bringt mir das Ganze gleich viel weniger. Ich brauch auf jedenfall irgendwie das aktuelle Programmverzeichnis.

Ich kann ja nicht einmal eine "Geistdatei" mit new File("/../none.txt") ein Verzeichnis weiter Vorn erstellen und die Geistdatei zur Pfadermittlung des Programms missbrauchen, in diesem Falle wird wieder von /home/user ausgegengen - es wird also Versucht die none.txt Datei unter /home zu erstellen und das scheitert dann an keinen Schreibrechten und new File("none.txt") wird unter /home/user erstellt.

Derzeit arbeite vorrübergehend damit das sich der Ordner "Docs" eben im Userverzeichnis befindet.
 
Zuletzt bearbeitet:

mabuhay

Bekanntes Mitglied
Hallo

Ich hatte erst gerade die Gleiche Frage: http://www.java-forum.org/allgemeine-java-themen/99655-speichern-einstellungen.html


Ich hab gerade festgestellt, dass das jediglich ein Problem unter meinem Linux (Ubuntu) ist.
Unter Windows funktioniert dies mit der zweiten Variante. Sogar wenn sich das Programm auf einem USB-Stick befindet, der Pfad wird korrekt bestimmt.

Das überrumpelt mich jetzt gewaltig. :bahnhof:
Warum tanzt die Anwendung bei Ubuntu so gewaltig aus der Reihe?

Das "Problem" ist, dass jeweils der Arbeitspfad von Java verwendet wird. Führst du es in der Konsole aus, z.B. in /home/user mit java -jar /pfad/zur/jar ist der Arbeitspfad /home/user, führst du das gleiche in /home/user/verzeichnis aus ist der Arbeitspfad /home/user/verzeichnis. Bei Ubuntu ist der Arbeitspfad halt immer das Benutzerverzeichnis, wo eigentlich auch alle Konfigurationsdateien liegen.

Ich habs so gelöst:
Java:
//Windows
settingsPath = System.getenv("APPDATA");
//Unix
if (settingsPath == null) {
	settingsPath = System.getProperty("user.home");
}
und die Datei dann als .Programmname.settings abgelegt (zu beachten der Punkt am Anfang). Somit wird die Konfigurationsdatei in Windows unter den Programmeinstellungen und unter Unix im home-Verzeichnis (Versteckt) abgelegt. Wie sich das ganze bei Mac verhält weiss ich noch nicht.

Für den Ordner Docs kannst du ja den Benutzer wählen lassen, wo der angelegt werden/sein soll.

mfg
 

Michael...

Top Contributor
Ich würde mal behaupten meine Variante funktioniert Plattformunabhängig, nur dass man auf entsprechenden Systemen anstelle des batch Skripts ein shell Skript verwenden muss, bzw. anderweitig sicherstellen muss, dass benötigte Verzeichnisse im ClassPath sind.
 

hemeroc

Bekanntes Mitglied
Da ich das Problem auch in meiner Anwendung hatte hier meine Lösung:

Java:
new File(DEINEKLASSE.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath());

LG Hemeroc
 

FArt

Top Contributor
Konfigurationen sollte man am besten mit ins JAR packen (wenn sie nicht verändert werden oder spezfisch für jeden Benutzer benötigt werden). Dann werden sie über den Klassenpfad geladen.
Sonst kann man die Ressourcen relativ zum Ausführungsverzeichnis ablegen. Bei einem executable JAR dann den Klassenpfad in der Manifestdatei pflegen.
Laufzeitkonfigurationen (besonder benutzerspezifische) sollten im Benutzerverzeichnis abgelegt werden, welches leicht ermittelt werden kann.

Über Umwege die Pfade irgendwie herauszubekommen funktioniert nicht plattformunabhängig. Skripten sind natürlich auch eine Möglichkeit, aber die muss man auch plattformabhängig pflegen.
 

mabuhay

Bekanntes Mitglied
Da ich das Problem auch in meiner Anwendung hatte hier meine Lösung:

Java:
new File(DEINEKLASSE.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath());

LG Hemeroc

Soviel ich weiss funktioniert das auch nicht. Starte dein Jar mal aus der Konsole. z.B. gehe in irgend einen Ordner und starte dann java -jar /Pfad/zum/jar und scha dir die Ausgabe des Pfades an. Je nachdem wo du bist wirst du sehr wahrscheinlich einen anderen Pfad bekommen. Ausser du nimmst an dass dein java-programm nur unter Windows ausgeführt wird und nur durch doppelklick auf die jar.
 

Java-Freak

Bekanntes Mitglied
also bei mir gings... lass des / vor den punkten mal weg
noch ne frage, wenn du ne jar startest, wir machst du des dann?
weil, bei mir war des mal so, des der dateimanager dolphin von wo ichs gestartet habe sowas immer in /home/user/Documents/ abgelegt hat. das lag dan aber nicht an meim programm sondern war von dem dateimanager bedingt. versuchs mal das jar mit 'java -jar DateiName.jar' aus der konsole zu starten und schau dann obs geht
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G aktueller Pfad Java Basics - Anfänger-Themen 4
G Filedialog und Mac OS X Leopard: Aktueller Pfad? Java Basics - Anfänger-Themen 3
A Pfad aktueller Applikation auslesen Java Basics - Anfänger-Themen 3
C Aktueller Wert von einem JSlider auf ein Label Java Basics - Anfänger-Themen 2
G aktueller Panel, der in BorderLayout.SOUTH angeordnet ist Java Basics - Anfänger-Themen 11
W Dotenv relativer vs absoluter Pfad Java Basics - Anfänger-Themen 2
J Pfad zerlegen Java Basics - Anfänger-Themen 2
berserkerdq2 Wie gebe ich den Pfad zu einer Datei an, die in einem Ordner in Eclipse ist? Java Basics - Anfänger-Themen 1
S Längster Pfad zwischen zwei Vertices in einem Graph Java Basics - Anfänger-Themen 3
C Pfad zu Properties-File bei ResourceBundle Java Basics - Anfänger-Themen 7
CptK Richtigen Pfad beim einlesen von Datei finden Java Basics - Anfänger-Themen 2
P Möglichen Pfad überprüfen Java Basics - Anfänger-Themen 5
M Java GUI explorer aufrufen um Pfad zu bekommen Java Basics - Anfänger-Themen 3
R FXMLLoader Pfad falsch`? Java Basics - Anfänger-Themen 4
S Alternativer Pfad Java Basics - Anfänger-Themen 5
R speicherort Mac pfad angeben Java Basics - Anfänger-Themen 3
L Breadth-First Search statt einem Pfad, alle Pfade herausfinden Java Basics - Anfänger-Themen 4
O Best Practice Datei-Pfad zerlegen Java Basics - Anfänger-Themen 4
topi relativer Pfad in einem Runnable JAR file Java Basics - Anfänger-Themen 12
H pfad finden Java Basics - Anfänger-Themen 12
H Pfad Program Files\Common Files\Oracle\Java\javapath Java Basics - Anfänger-Themen 3
L Pfad zum Jar Java Basics - Anfänger-Themen 7
it_is_all Bild-Pfad wird gefunden, nicht aber Textdatei-Pfad Java Basics - Anfänger-Themen 8
J Leerzeichen im Pfad automatisch erkennen Java Basics - Anfänger-Themen 30
B Log4J Pfad des Logfiles definieren Java Basics - Anfänger-Themen 6
D Umgebungsvariable Pfad javaw.exe für Programmstart auf Windows Java Basics - Anfänger-Themen 1
D Pfad Java Basics - Anfänger-Themen 15
H nio Pfad aus Dateinamen extrahieren Java Basics - Anfänger-Themen 4
R Pfad angeben Java Basics - Anfänger-Themen 7
S Pfad für Dateisystem?? Java Basics - Anfänger-Themen 13
P JSON-Konfigurationsdatei verwenden: Probleme mit Pfad Java Basics - Anfänger-Themen 1
T Classpath Problem mit dem auslesen von Text-Dateien (Pfad) Java Basics - Anfänger-Themen 3
M Pfad zu einer Datei in einer exportierten Jar-Datei Java Basics - Anfänger-Themen 5
S ungültiger Pfad bei der Installation von API documentation Java Basics - Anfänger-Themen 0
N .propertiesdatei über Relativen Pfad einlesen lassen Java Basics - Anfänger-Themen 5
I ZIP Archive erstellen - ich möchte aber nur den jeweiligen Ordner zippen, bekomme ganzen Pfad Java Basics - Anfänger-Themen 1
I Bei Umlauten und Leerzeichen im Pfad, wird Datei nicht gefunden Java Basics - Anfänger-Themen 5
O JFileChooser Verhalten -Pfad Java Basics - Anfänger-Themen 15
V java Pfad javac Java Basics - Anfänger-Themen 8
D Ein Icon ohne Pfad sondern mit Package. Java Basics - Anfänger-Themen 4
P Leerzeichen in Pfad... Java Basics - Anfänger-Themen 17
P Datei auf Pfad speichern Java Basics - Anfänger-Themen 7
B Relativer Pfad zwischen zwei Files Java Basics - Anfänger-Themen 2
H Programm zur Ausgabe von Datei und Pfad Java Basics - Anfänger-Themen 7
C Pfad für Bilder angeben Java Basics - Anfänger-Themen 11
L Pfad "zuschneiden" Java Basics - Anfänger-Themen 3
B In welchem (Default) Pfad erstellt Java Dateien? Java Basics - Anfänger-Themen 4
V relativer Pfad geht nicht, absolut schon? Java Basics - Anfänger-Themen 3
J Input/Output Datei auslesen, Pfad eingeben Java Basics - Anfänger-Themen 4
S PATH und Pfad auslesen.... Java Basics - Anfänger-Themen 3
X JDK installieren Pfad wird nicht gefunden Java Basics - Anfänger-Themen 5
B Classpath cmd java mit absolutem Pfad Java Basics - Anfänger-Themen 15
B eingene Klasse in eigenem Prozess starten mit relativem Pfad Java Basics - Anfänger-Themen 5
J FileOutputStream aktuelle Speicher Pfad ausgeben Java Basics - Anfänger-Themen 13
T Erkennen ob ein Pfad lokal oder im Netzwerk ist Java Basics - Anfänger-Themen 13
F Zugriff auf Pfad des gerade ausgeführten Programms? Java Basics - Anfänger-Themen 14
S Pfad auslesen Java Basics - Anfänger-Themen 3
B Externe Libraries fuer Applet ... Pfad eingeben? Java Basics - Anfänger-Themen 23
Helgon Pfad richtig angeben Java Basics - Anfänger-Themen 7
E Input/Output Relativer Bild-Pfad für InputStream Java Basics - Anfänger-Themen 5
M Existiert der gegebene Pfad? Java Basics - Anfänger-Themen 5
F Relativer Pfad auf Datei im Projektordner Java Basics - Anfänger-Themen 11
B Pfad einer .jar im Programm ermitteln Java Basics - Anfänger-Themen 13
T Pfad für Datei neben Jar Java Basics - Anfänger-Themen 9
S File Kopieren Path Pfad Problem Java Basics - Anfänger-Themen 3
I Java-Programmm starten/ Pfad hsql DB Java Basics - Anfänger-Themen 7
D Input/Output Pfad richtig ermitteln Java Basics - Anfänger-Themen 12
T Pfad gültig oder ungültig? Java Basics - Anfänger-Themen 17
T brauche den pfad Name! Java Basics - Anfänger-Themen 2
Z css pfad falsch Java Basics - Anfänger-Themen 7
P ImageIcon/Pfad Java Basics - Anfänger-Themen 3
M externen Pfad in Jar verwenden Java Basics - Anfänger-Themen 3
V pfad.exists() gilt nicht für "//server/a/xyz.jpg"? Java Basics - Anfänger-Themen 12
C Relativer Pfad - Statische Methode Java Basics - Anfänger-Themen 6
C exec Aufruf mit Leerzeilen im Pfad Java Basics - Anfänger-Themen 3
J Pfad bzw. Namen einer Datei auslesen Java Basics - Anfänger-Themen 6
D Pfad zu "Eigenen Dateien" ermitteln Java Basics - Anfänger-Themen 8
A Relativer Pfad zu einem File ermitteln Java Basics - Anfänger-Themen 2
M createImage ungültiger Pfad registrieren Java Basics - Anfänger-Themen 2
S Pfad für Datei falsch - wie richtig angeben? Java Basics - Anfänger-Themen 7
H Wie Projekt-Ordner-Pfad ermitteln? Java Basics - Anfänger-Themen 11
M Problem mit relativen Pfad unter Linux Java Basics - Anfänger-Themen 5
L relativer Pfad Java Basics - Anfänger-Themen 2
S In Eclipse relativen Pfad fuer Tomcat Server erstellen..? Java Basics - Anfänger-Themen 3
E Pfad zu einem gif-Bild wird zur Laufzeit nicht gefunden Java Basics - Anfänger-Themen 5
megachucky FileInputStream findet nur absoluten Pfad, keinen Relativen ?! Java Basics - Anfänger-Themen 7
M Pfad angabe bei getRescource und ImageIO.write Java Basics - Anfänger-Themen 4
E new File macht den Pfad kaputt Java Basics - Anfänger-Themen 15
0 Den Pfad für das Bild angeben Java Basics - Anfänger-Themen 9
D Pfad zum Konfigurationsfile von Servletanwendung "dynamisieren" Java Basics - Anfänger-Themen 27
H Wie mache ich aus pfad\\unterpfad pfad\unterpfad? Java Basics - Anfänger-Themen 3
L datei speichern untervorgegebenen pfad Java Basics - Anfänger-Themen 3
A relativer Pfad Java Basics - Anfänger-Themen 6
R Properties über statischen Pfad laden Java Basics - Anfänger-Themen 2
L Pfad von Webprojekt auslesen Java Basics - Anfänger-Themen 10
F Datei suchen --> Pfad als String speichern Java Basics - Anfänger-Themen 8
R Pfad relativ eingeben Java Basics - Anfänger-Themen 20
Z Pfad zum Jararchiv Java Basics - Anfänger-Themen 4
S Object Pfad Java Basics - Anfänger-Themen 3
S log4j pfad per umgebungsvariable setzen? Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben