FileChooser print to text file

Hey Leute,

Da bin ich wieder mit einem Problem:

Diesmal wollte ich einen String via FileChooser in eine .txt file printen lassen. Etwas in dem Stil:

Überschrift 1
____________
1 x Java
2 x C#

Überschrift 2
____________
3 x Café
7 x Energy Drink

Die Formatierung passt soweit, das habe ich mit einem Sysout getestet. Wenn ich diesen oben gebauten String mit dem FileChooser in einer TextDatei speichern will, so steht später allerdings das drin:

Überschrift 1____________1 x Java2 x C#Überschrift 2____________3 x Café7 x Energy Drink

Jetzt ist meine Frage, ob es eine Möglichkeit gibt dem FileChooser zu sagen, dass er die Sonderzeichen/escape character (
, etc) nicht nur wegwirft, sondern in der Ausgabe auch als Formatierung benutzt?

Lg und Danke schonmal,
Do Re

soweit grob nachgeschaut hat auch in JavaFX der FileChooser nicht mehr Aufgaben, als sein Name besagt:
eine Datei auszusuchen, nicht darin zu schreiben!

hast du auch Code wie FileWriter? das ist doch entscheidend, und was übergibst du da genau, einen langen String mit
zwischendurch?
halte dich vielleicht an Code wie in diesem Link
java - In need of JavaFX help writing to a .txt file - Stack Overflow
(nicht unbedingt den von der Frage, sondern von der grünen Antwort)

nutze newLine() für system-passenden Zeilenumbruch wie vielleicht

letztlich ist es aber auch immer noch davon abhängig, wie die Datei später geöffnet wird, welche Erwartung an Zeilenumbrüche/ Encoding/ Charset das Textprogramm hat,
da gibt es mit verschiedenen Programmen, verschiedenen Dateien, verschiedenen Betriebssystemen kein endgültiges richtig oder falsch, es muss einfach aktuell zusammenpassen

Das geht nicht.

Wie schreibst du denn in die Datei? Doch nicht mit dem FileChooser!?

Hey, danke für eure Antworten.

Nein, ihr habt natürlich recht, ich schreibe nicht mit dem FileChooser. Ich ware heute morgen etwas übernächtigt, entschuldigt. Hier ist der Quellcode:

	private static String MEALS = "Meals 
";
	private static String DRINKS = "Drinks 
";
	private static String UNDERLINE = "___________ 
";
	
	private static int success = -1;

	public static int save (ObservableList<ShoppingItem> mealData, ObservableList<ShoppingItem> drinkData) {
		success = -1;
		String shoppingList = getShoppingString (mealData, drinkData);
		
		Stage stage = new Stage ();
		FileChooser fc = new FileChooser();
		fc.setTitle(SAVE);
		
        //Set extension filter
        FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("TXT files (*.txt)", "*.txt");
        fc.getExtensionFilters().add(extFilter);
		
		File file = fc.showSaveDialog(stage);
		if (file != null) {
			SaveFile(shoppingList, file);
		}
		
		return success;
	}
	
	private static String getShoppingString (ObservableList<ShoppingItem> mealData, ObservableList<ShoppingItem> drinkData) {
		StringBuilder toReturn = new StringBuilder ();
		
		toReturn.append(MEALS);
		toReturn.append(UNDERLINE);
		
		for (ShoppingItem si : mealData){
			toReturn.append(si.getAmount());
			toReturn.append(" x ");
			toReturn.append(si.getName());
			toReturn.append("
");
		}
		
		toReturn.append("

");
		toReturn.append(DRINKS);
		toReturn.append(UNDERLINE);
		
		for (ShoppingItem si : drinkData) {
			toReturn.append(si.getAmount());
			toReturn.append(" x ");
			toReturn.append(si.getName());
			toReturn.append("
");
		}
		
		System.out.println(toReturn);
		
		return toReturn.toString();
	}
	
    private static void SaveFile(String content, File file){
        try {
            FileWriter fileWriter = null;
             
            fileWriter = new FileWriter(file);
            fileWriter.write(content);
            fileWriter.close();
            success = 0;
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }```

Dabei kommt dann soetwas raus, wie ich oben schon geschrieben habe, bei sysout:

Überschrift 1


1 x Java
2 x C#

Überschrift 2


3 x Café
7 x Energy Drink```

In der ausgewählten Datei wird es allerdings so geschrieben:

Überschrift 1____________1 x Java2 x C#Überschrift 2____________3 x Café7 x Energy Drink

Und ich weiß nicht wieso…

immer etwas komisch, wenn eine unbedeutende Nachfrage X und vor allem geraten eine komplette Erklärung geantwortet wurde,
darauf die Nachfrage X wiederum beantwortet, aber auf die vorhandene komplette Lösung des Problems mit keinem Wort eingegangen wird…

[QUOTE=SlaterB]soweit grob nachgeschaut hat auch in JavaFX der FileChooser nicht mehr Aufgaben, als sein Name besagt:
eine Datei auszusuchen, nicht darin zu schreiben!

hast du auch Code wie FileWriter? das ist doch entscheidend, und was übergibst du da genau, einen langen String mit
zwischendurch?
halte dich vielleicht an Code wie in diesem Link
java - In need of JavaFX help writing to a .txt file - Stack Overflow
(nicht unbedingt den von der Frage, sondern von der grünen Antwort)

nutze newLine() für system-passenden Zeilenumbruch wie vielleicht

letztlich ist es aber auch immer noch davon abhängig, wie die Datei später geöffnet wird, welche Erwartung an Zeilenumbrüche/ Encoding/ Charset das Textprogramm hat,
da gibt es mit verschiedenen Programmen, verschiedenen Dateien, verschiedenen Betriebssystemen kein endgültiges richtig oder falsch, es muss einfach aktuell zusammenpassen[/QUOTE]

die ersten beiden Zeilen die Nachfrage X, alles weitere wichtige Informationen zum Problem…

Mit welchem Programm betrachtest du die geschriebene Datei?

*** Edit ***

Nachtrag, off Topic:

private static int success = -1;

Wirf diese Variable raus.

Halte ich für das wichtigste

Ersetze deine "
"
durch System.lineSeparator() [Java Docs] dadurch bekommst du den Zeilenumbruchcode für dein Betriebssystem heraus.

Ja ja, Java ist OS unabhängig, aber wenn es zu Textcodierung kommt leider überhaupt nicht.
Java gibt die Textcodierung und unter anderem auch die Zeilenumbrüche direkt an den Entwickler vom System so weiter.
In einem meiner Programme auf Windows entwickelt konnte die Umlaute und andere nicht amerikanische Sonderzeichen auf MacOS nicht darstellen, stattdessen gabs Fragezeichen.

Also die Methode lineSeparator() verwenden, statt händisches "
".
(Oder wie SlaterB vorgeschlagen hat einen passenden Writer wie BufferedWriter oder PrintWriter verwenden, die dir Zeilenumbrüche direkt in die Datei schreiben können [Link])