.jar Datei führt den Code nicht richtig aus

Hallo, ich bin neu hier im Forum (Und bei Java) und weis nicht, ob ich hier im Richtigen Forum bin.

Mein Problem: ich habe ein Programm geschrieben, Welches nach der Eingabe eine.txt Datei erstellen soll mit den eingegebenen Daten. Das funktioniert aber nur, wenn ich den Code kompiliere und danach mittels: "java Programm" öffne. Wenn ich Das Programm über die War öffne, lässt es sich ganz normal ausführen, aber es erstellt die Datei nicht.



Es wäre cool, wenn jemand da eine Idee hätte, warum das nicht funktioniert.
 
Zuletzt bearbeitet:
Ohne Code ist es nur rumraten.

Außerdem war oder jar?

Gibt es Fehlermeldungen auf der Konsole? Was man nie im Code tun sollte, Exceptions schlucken, sondern immer weiterwerfen / ausgeben / protokollieren oder sinnvolle behandeln.

Hauptursache ist in der Regel ein nicht korrektes zusammenbauen von Pfaden bzw. Zugriff auf Resourcen, was nicht mehr funktioniert wenn man es im JAR macht - aber das ist in der Regel beim lesen das Problem.

Sinnvoll wäre es den Code, der die Datei schreibt zu zeigen.
 
Oh, es sollte jar sein. Nicht war. Die blöde Autokorrektur. ich habe den code einfach mal unten einkopiert.

Fehler werden keine Angezeigt.


JOptionPane.showMessageDialog(null, "Ihr ergebnis lautet: " + ergebnis, "Ergebnis", 1);



try {
File file = new File("Quadratmeterpreise"); //Datei, in die geschrieben werden soll
boolean neu = false;
if (!file.exists()) {
file.createNewFile();
neu = true;
}
try {
BufferedWriter writer = new BufferedWriter(new FileWriter("Preise.txt", true)); //Erzeugen eines effizienten Writers für Textdateien
if(!neu) {
writer.write("\n");
}
writer.write("Für das Objekt: " + Objekt);
writer.newLine();
writer.write("gilt ein Quadratmeterpreis von: " + qmPreis);
writer.write("Gesamt Preis: "+ ergebnis );
writer.newLine();
writer.close();
}
catch(IOException ioe) {
System.err.println(ioe);
}
}
catch(IOException ioAusnahme) {
System.out.println("Fehler beim öffnen der Datei!");
}
}
}
 
Du willst hier zwei Datein erstellen. "Quadratmeterpreise" die du vielleicht ertstellst ein Fehler würde im "zweiten Catch" ankommen.

Schreiben tust du in die zweite Datei "Preise.txt" Fehler hier würden in dem ersten Catch ankommen. Da machst du nichts.
 
Zuletzt bearbeitet:
Oh, das habe ich garnicht. bemerkt. Ich habe es jetzt so verändert, dass er die Datei erstellt und in die Gleiche Datei die Eingaben schreiben soll. Aber wie erwartet macht er es nur, wenn ich es über das Terminal mache. in der neu erstellten jar macht er es nicht.


try {
File file = new File("Preise.txt"); // Erstellt die Datei
boolean neu = false;
if (!file.exists()) {
file.createNewFile();
neu = true;
}
try {
BufferedWriter writer = new BufferedWriter(new FileWriter("Preise.txt", true)); // schreibt in die Datei
if(!neu) {
writer.write("\n");
}
writer.write("Für das Objekt: " + Objekt);
writer.newLine();
writer.write("gilt ein Quadratmeterpreis von: " + qmPreis);
writer.write("Gesamt Preis: "+ ergebnis );
writer.newLine();
writer.close();
}
catch(IOException ioe) {
System.err.println(ioe);
}
}
catch(IOException ioAusnahme) {
System.out.println("Fehler beim öffnen der Datei!");
}
}
}



Edit: Falls es hilft zur Erkennung des Problems: Ich benutze MacOs BigSur und Visual Studio Code als Umgebung.
 
Zuletzt bearbeitet:
Ich habe jetzt mal die komplette Festplatte abgesucht. Leider hat er die Datei nicht gefunden. Die Datei mit dem alten Namen auch nicht. Gibt es denn eine Möglichkeit einen Pfad anzugeben in meinem Code, wo die Datei eingespeichert und beschrieben werden soll?
 
wenn du es in der IDE ausfürst wird vielleicht java 7 benutzt.

als jar wird die java Version benutzt die du auf deinem Rechner hast.

Teste mal in der Konsole "java -version" welche du Installiert hast.
 
Ich habe jetzt mal die komplette Festplatte abgesucht. Leider hat er die Datei nicht gefunden. Die Datei mit dem alten Namen auch nicht. Gibt es denn eine Möglichkeit einen Pfad anzugeben in meinem Code, wo die Datei eingespeichert und beschrieben werden soll?
Klar du brauchst den Path nur vor der Datei scheiben.
Java:
File file = new File("/user/Preise.txt");

Der Path also das Verzeichnis muss aber schon existieren. Wenn du createNewFile benutzt.
 
Klar du brauchst den Path nur vor der Datei scheiben.
Java:
File file = new File("/user/Preise.txt");

Der Path also das Verzeichnis muss aber schon existieren. Wenn du createNewFile benutzt.
Vielen Dank und sorry für das Späte Antworten. Ich habe es ausprobiert und es funktioniert. Eine Frage bleibt mir dennoch: gibt es eine Möglichkeit einen relativen Pfad anzugeben? Wenn der Nutzer als Beispiel nicht bekannt ist. /Users/„nichtBekannt“/Desktop/Preise.txt
 
Vielen Dank und sorry für das Späte Antworten. Ich habe es ausprobiert und es funktioniert. Eine Frage bleibt mir dennoch: gibt es eine Möglichkeit einen relativen Pfad anzugeben? Wenn der Nutzer als Beispiel nicht bekannt ist. /Users/„nichtBekannt“/Desktop/Preise.txt
 
Vielen Dank und sorry für das Späte Antworten. Ich habe es ausprobiert und es funktioniert. Eine Frage bleibt mir dennoch: gibt es eine Möglichkeit einen relativen Pfad anzugeben? Wenn der Nutzer als Beispiel nicht bekannt ist. /Users/„nichtBekannt“/Desktop/Preise.txt
Du kannst das so machen:
Java:
        String homeDir = System.getProperty("user.home");
        String currentDir = System.getProperty("user.dir");
"user.home" ist dabei das Home-Verzeichnis des Nutzers, "user.dir" ist der aktuelle Programm/Start-Ordner, s.: https://docs.oracle.com/javase/8/docs/api/java/lang/System.html#getProperties--
 
Wenn der Nutzer als Beispiel nicht bekannt ist
Oneixee5 hat zwar schon gesagt, wie man immer z.B. auf das Home-Verzeichnis kommt, aber grundsätzlich musst du dir bei solchen Problemen dann die Frage stellen, was soll dann gemacht werden?
Ein relativer Pfad ist einfach, das funktioniert heute noch genauso wie zu DOS Zeiten:
Java:
new File("demo.txt")
//oder auch
new File("./demo.txt")
//oder auch
new File("./Unterverzeichnis/demo.txt")
//du kannst auch ein Verzeichnis nach oben gehen
new File("../demo.txt")

Der ist dann relativ zum aktuellen Verzeichnis. Ist es das, was du willst?
Wenn du aber was relativ zum Home-Verzeichnis machen willst, kannst du dir entweder selbst die Strings zusammenbauen, oder den Konstruktor verwenden, der das recht elegant macht:
Java:
new File(System.getPropert("user.home"), "Documents/afile.txt")
Die macht im Endeffekt nichts anderes, als die beiden Strings zu verknüpfen und einen Fileseparator dazwischenzuschieben mit ein paar Überprüfungen (bei Bedarf einfach mal den Quellcode anschauen)
 

Zurück
Oben