Input/Output Dateien erstellen, wenn ein JAR ausgeführt wird

Moin moin!

Ich habe folgendes Problem:
Ich überprüfe beim Programmstart, ob die Datei, in der mein Programm die Einstellungen ablegt, existiert. Sofern dies nicht der Fall ist, will ich diese Datei erstellen und mit Standardeinstellungen füllen.

Meine Einstellungen sind intern als Properties-Objekt gespeichert. Um diese in eine Datei zu schreiben, verwende ich folgenden Code:
Code:
Java:
private static final String FS = System.getProperty("file.separator");
public static final String SETTINGS = System.getProperty("user.dir") + FS + "Resources"
			+ FS + "settings.mqs";

public static void saveProperties(Properties p) throws IOException {
		File f = new File(SETTINGS);
		if (!f.exists()) {
			boolean b = f.createNewFile();
		}
		 BufferedOutputStream settings = new BufferedOutputStream(
		 new FileOutputStream(new File(SETTINGS)));
		 p.store(settings, null);
	}

Wenn ich das Programm auf der Kommandozeile (Terminal (Mac/Linux) bzw. Eingabeaufforderung (Windows)) starte, ist alles wunderbar.
Ich möchte das Programm aber eigentlich per Doppelklick starten lassen, das ist einfach bequemer. Unter Mac OS und Windows (XP und 7) funktioniert dies bei mir absolut unproblematisch. Unter Linux (Ubuntu) leider überhaupt nicht. Ubuntu schmeißt fröhlich
Code:
FileNotFoundExcepsion
s.

Was kann ich da tun?
 
N

nillehammer

Gast
Mach mal System.out.println(SETTINGS) und schau, ob der ausgegebene Pfad richtig ist und ob Du in dem angegebenen Pfad die Datei findest und auch schreiben kannst.
 
System.out.println() bringt mir ja relativ wenig, wenn ich ein JAR per Doppelklick starte. Über die Kommandozeile ausgeführt, ist der Pfad korrekt, das habe ich schon ausprobiert.

Dass ich in dem Verzeichnis nicht schreiben darf, kann ich mir nicht vorstellen, denn die JAR befindet sich in /home/User/Downloads/ordner/

Er findet die Datei übrigens auch nicht, wenn sie vorhanden ist und ich das JAR per Doppelklick starte, obwohl die Datei da ist!
 
Ich habe neue Erkenntnisse:

Führe ich die JAR auf der Kommandozeile aus, ist
Code:
System.getProperty("user.dir")
der Pfad, indem die JAR liegt. Per Doppelklick wird leider nur das Benutzerverzeichnis zurückgegeben ...
 
N

nillehammer

Gast
Der Code sieht ansich gut aus, in den meisten Konstellationen funktioniert er, nur in einer einzigen nicht. Da liegt es nahe, dass genau in dieser Konstellation etwas anders ist. Meine Vermutung ist, dass System.getProperty("user.dir") irgendetwas unerwartetes zurück liefert, weil die Umgebungsvariable nicht richtig gesetzt ist. Das bekommt man in einem laufenden Programm eben nur mit Log-Statements oder System.out raus.

Man kann doch auch bei per Doppelklick gestarteten jars dafür sorgen, dass ein Konsolenfenster aufgeht. Unter Windows muss man dafür den Öffnen-Mit Dialog aufrufen. Sowas wirds doch bei Ubuntu auch geben.

//Edit: Zu langsam, hastes ja schon selbst gemerkt.
 
Naja, ich kenne mich mit Ubuntu leider gar nicht aus ... ich werde aber mal noch ein wenig forschen. Vielleicht komme ich doch noch zu einem Ergebnis.
Beachte auch mal meine Erkenntnis aus dem Post direkt vor deinem neuen.
 
N

nillehammer

Gast
Habich, deswegen auch mein Edit.

Ich würde mit "user.home" arbeiten. Dann kriegst Du immer das Home-Verzeichnis des aktuellen Nutzers heraus. Das kannst du als fixen Ausgangspunkt für Deine Resource-Dateien nehmen. Ein möglicher Pfad wäre dann "USER_HOME/DeinAnwendungsName/Resources/configDatei" .Damit wäre es egal, wie Du Deine Anwendung aufrufst. Die Datei liegt immer am selben Ort. Das machen eigentlich alle Anwendungen so, die Konfigurationen speichern müssen.
 
Mh, ich weis nicht, ob das so einfach klappt ... in meinem Resource-Folder liegen auch noch ein paar andere Dateien, die ich brauche ...

Dann schreibe ich für Linux lieber ein Shellskript und für Windows einen Batch. Eigentlich wollte ich das aber vereiden, weil das immer nur ein Workaround ist.

Es muss doch möglich sein, den Ordner auszulesen, indem das gestartete JAR liegt.
 

Michael...

Top Contributor
Ich habe neue Erkenntnisse:

Führe ich die JAR auf der Kommandozeile aus, ist
Code:
System.getProperty("user.dir")
der Pfad, indem die JAR liegt. Per Doppelklick wird leider nur das Benutzerverzeichnis zurückgegeben ...
"user.dir" gibt das Verzeichnis zurück aus dem die Applikation bzw. die JVM gestartet wurde, wenn das z.B. über die Konsole aus dem Verzeichnis passiert in dem das jar liegt, dann wird natürlich dieses Verzeichnis zurückgeben. Keine Ahnung wie unter Ubuntu der jar Aufruf implementiert ist, unter Windows würde das in diesem Fall bei Doppelclick sogar funktionieren.

Wenn es darum geht den Pfad des jars zu ermitteln, hilft z.B.
Class#getProtectionDomain().getCodeSource().getLocation().getFile()
oder
Class#getProtectionDomain().getCodeSource().getLocation().getPath()
 
Class#getProtectionDomain().getCodeSource().getLocation().getFile()
oder
Class#getProtectionDomain().getCodeSource().getLocation().getPath()

Mh, das klappt so leider, zumindest unter Ubuntu, leider auch nicht. Diese Methoden liefern mir lediglich
Code:
./
zurück. Das selbe passiert übrigens, wenn ich
Code:
new File(Class#getProtectionDomain().getCodeSource().getLocation().getFile()).getAbsolutePath()
aufrufe.
 
Ganz doof bin ich auch nicht ... in meinem Code steht
Code:
 ClassName.class.get...().absolutPath()
!

Jetzt bin ich aber erstmal mit anderen Dingen als mit Java beschäftig, ich probiere später weiter!
 
Ah, endlich. Ich glaube, ich habe es endlich geschafft. Nach langem und intensiven Suchen, probieren und auf die Schnauze fallen, meine ich, eine cernünftige Lösung gefunden zu haben!

Java:
String absoluteJarFile = new File(
		System
			.getProperty("java.class.path")
			.split(System.getProerty("path.separator"))[0]
	).getAbsolutePath();
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
Thomasneuling Java Jar datei erstellen, von Projekt, dass auch Javafx Dateien, FXML Dateien und CSS Dateien, sowie Bilder enthält? Allgemeine Java-Themen 14
M Zwei unterschiedliche JAR Dateien mit ANT erstellen Allgemeine Java-Themen 8
U Wie kann mit einen Java Applet Dateien erstellen,verschieben und löschen? Allgemeine Java-Themen 9
J Applet zum .java-Dateien auslesen/erstellen Allgemeine Java-Themen 5
V Rechte von .jar-executables bzgl. Dateien erstellen Allgemeine Java-Themen 4
H Word Dateien erstellen Allgemeine Java-Themen 2
B jar-dateien mit eclipse erstellen Allgemeine Java-Themen 4
S 5. Programme, die EXE-Dateien aus JAVA-Anwendungen erstellen Allgemeine Java-Themen 4
G Dateien lesen Allgemeine Java-Themen 3
OnDemand Unterschiedliche jar Dateien zusammen führen Allgemeine Java-Themen 8
A Sicheres Löschen von Dateien Allgemeine Java-Themen 7
O git ignore für Intellji braucht es die .idea Dateien? Allgemeine Java-Themen 8
Master3000 Dateien zwischen verschiedenen Netzwerken senden Allgemeine Java-Themen 17
L Jar Dateien in Classpath laden ab JDK 9+ Allgemeine Java-Themen 11
d.lumpi JDA eclipse dateien versenden Allgemeine Java-Themen 4
O Produziert das Tool "jpackage" (ab JDK 14) .exe Dateien, die auf einer Zielumgebung ohne JRE lauffähig sind ?` Allgemeine Java-Themen 7
O Wie kann ich in Apache POI (Excel Dateien schreiben) Datumszellen in Excel erzeugen Allgemeine Java-Themen 6
T Meine Frage lautet wie ich 2 CSV Dateien miteinander in Java verbinde und Spalten die zueinander gehören durch den gleichen Key zusammen ausgebe? Allgemeine Java-Themen 5
L Dateien richtig auslesen Allgemeine Java-Themen 6
L Eclipse Runnable Jar mit Dateien Allgemeine Java-Themen 8
W Server-Thread schreibt nicht alle Dateien Allgemeine Java-Themen 6
MiMa Logging mit log4j2 in verschiedene Dateien? Allgemeine Java-Themen 22
I Klassen aus Jar-Dateien aus anderem Ordner laden Allgemeine Java-Themen 3
O jar und EXE Dateien, Pfade zur Laufzeit Allgemeine Java-Themen 1
W Dateien werden nicht gelöscht - warum? Allgemeine Java-Themen 12
B Dateien / Bilder von "webapp" Ordner bekommen? Allgemeine Java-Themen 1
P Erste Schritte Dateien löschen Allgemeine Java-Themen 4
H Erste Schritte Ausführbare Dateien lassen sich nicht starten Allgemeine Java-Themen 5
I Java als exe veröffentlichen inkl. kompletter Dateien Allgemeine Java-Themen 4
M Drucken von Dateien Allgemeine Java-Themen 10
J jar Dateien unter Windows 7 mit spezifischer jdk öffnen Allgemeine Java-Themen 2
I Laden von Informationen aus Dateien: Austauschbarkeit: 2 Dateien sinnvoll? Allgemeine Java-Themen 2
N Temporäre Dateien Allgemeine Java-Themen 3
Bluedaishi Druck Probleme mit PDF dateien Allgemeine Java-Themen 4
M Dateien schneller kopieren Allgemeine Java-Themen 1
M Dateien nach kopieren vergleichen Allgemeine Java-Themen 9
Arif Input/Output Dateien im Jar-Programm speichern Allgemeine Java-Themen 12
D Collections.sort funktioniert nicht in exportierten .class Dateien Allgemeine Java-Themen 10
K Große JSON-Dateien schnell und effizient verarbeiten Allgemeine Java-Themen 16
J Programm zum Download von CSV-Dateien Allgemeine Java-Themen 4
V Eclipse .class Dateien Allgemeine Java-Themen 9
B Download von dateien Allgemeine Java-Themen 2
K Nicht alle class-Dateien im JRE? Allgemeine Java-Themen 2
MiMa Log4j in Dateien mit eigenem Namen schreiben Allgemeine Java-Themen 3
D Kopieren von Dateien aus einem Ordner in einen anderen Allgemeine Java-Themen 6
C Dateien in Jar aufrufen Allgemeine Java-Themen 14
X NetBeans Bilder und andere Dateien ins .jar schreiben und wieder aus .jar lesen Allgemeine Java-Themen 6
JavaWolf165 Externe .jar-Dateien in .jar-Datei intigrieren Allgemeine Java-Themen 0
X Dateien für Benutzer Sperren Allgemeine Java-Themen 4
D Dateien aus den Internet herunterladen Allgemeine Java-Themen 6
L Methoden Dateien älter als 30 Tage? Allgemeine Java-Themen 11
J .exe Dateien werden nicht gestartet obwohl Pfad richtig Allgemeine Java-Themen 6
RalleYTN Classpath Native Dateien(DLL, SO, JNILIB) Allgemeine Java-Themen 2
J Java .jar Dateien zusammenführen Allgemeine Java-Themen 1
L Best Practice Log Dateien analysieren und eventuell passende Daten am Chart darstellen Allgemeine Java-Themen 1
F Platzsparende Alternative zu .txt-Dateien Allgemeine Java-Themen 12
X Dateien von der Jar zum Ordner kopieren. Allgemeine Java-Themen 4
Ananaskirsche Input/Output Dateien im Ordner Allgemeine Java-Themen 8
A Input/Output Liste der Dateien in einem Ordner in einer Jar Datei erhalten Allgemeine Java-Themen 11
X Herunterladen von Dateien aus dem Internet Allgemeine Java-Themen 2
V Input/Output Sound Dateien aus Jar laden Allgemeine Java-Themen 18
M Dateien aus einem Verzeichnis auf einem Server auflisten Allgemeine Java-Themen 5
H PDFBox akzeptiert Dateien nicht Allgemeine Java-Themen 1
B Java - einlesen von Dateien und herausschneiden von XML Dokumenten Allgemeine Java-Themen 5
A Input/Output Spätes Schreiben von Dateien der JVM Allgemeine Java-Themen 3
Thallius Dateien Zippen und wieder heraus lesen? Allgemeine Java-Themen 4
T Dateien zur Laufzeit in Java-Programm packen? Allgemeine Java-Themen 3
Maxim6394 Jar Dateien starten nicht Allgemeine Java-Themen 7
U Eclipse Java Programm beschädigt .tar.gz dateien beim Entpacken Allgemeine Java-Themen 7
GUI-Programmer Mp3 Dateien bearbeiten und speichern Allgemeine Java-Themen 3
S Exklusive Sperre auf Dateien: FileChannel, FileLock Allgemeine Java-Themen 0
Bluedaishi Dateien löschen die älter als das aktuelle Datum sind Allgemeine Java-Themen 9
OnDemand Dateien einlesen und vergleichen Allgemeine Java-Themen 1
T Ordner samt Dateien kopieren Allgemeine Java-Themen 11
R Importieren von Txt-Dateien in AbstractTableModel Allgemeine Java-Themen 0
C Dateien komprimieren und verschlüsseln Allgemeine Java-Themen 3
F Eclipse Eclipse kompiliert nicht mehr die aktuellen Dateien Allgemeine Java-Themen 2
R Java Dateien "verschlüsseln" Allgemeine Java-Themen 2
L Passwortgeschützte Dateien Allgemeine Java-Themen 6
A Datentypen Dateien umbenennen mit Dateiendungen - Dateiendungen ausgeben Allgemeine Java-Themen 2
L Reparieren beschädigter PDF Dateien Allgemeine Java-Themen 3
F Dateien ins Array lagern und Optionen zur Auswahl, Allgemeine Java-Themen 5
J XML Dateien vergleichen Allgemeine Java-Themen 9
B Umbenennen von Dateien Allgemeine Java-Themen 2
B Erste Schritte Plugin erkennen und Class Dateien anzeigen lassen Allgemeine Java-Themen 3
W Best Practice Dateien parsen Allgemeine Java-Themen 3
B Dateien verschwinden aus bin Ordner?! Allgemeine Java-Themen 5
B Dateien prüfen auf Gleichheit Allgemeine Java-Themen 5
M Java Dateien verschieben Allgemeine Java-Themen 2
R Wav-Dateien wiederholt abspielen Allgemeine Java-Themen 2
L Methoden Verarbeitung von Größen Dateien Allgemeine Java-Themen 9
B Alt-Griechisch Zeichen in Dateien Allgemeine Java-Themen 2
M JAR Dateien nur mit Compiler Level 1.6 ausführbar Allgemeine Java-Themen 8
E Zugriff auf Dateien im Filesystem überwachen Allgemeine Java-Themen 5
G .jar Dateien lassen sich nicht mehr öffnen Allgemeine Java-Themen 2
M Datentypen Jar-Dateien öffnen nicht mit Java Allgemeine Java-Themen 4
C Mit Java PDF Dateien bearbeiten. Allgemeine Java-Themen 2
B Input/Output .java-Dateien auslesen Allgemeine Java-Themen 17
B Methoden Alle Methoden und Variablen aus Java-Dateien auslesen. Allgemeine Java-Themen 7
E Vorschläge, effizientes Hashing von Dateien für vergleich Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben