# Zeilenumbruch bei Schreiben einer Textdatei



## benner (11. Jan 2007)

Hallo erstmal,

ich lege Strings in einer Datei ab, wobei auch Zeilenumbrüche vorkommen. Dazu benutze ich folgenden Code(data ist eine ArrayList):


```
try
{
    BufferedWriter bw1 = new BufferedWriter(new FileWriter("data.dat",false));
    for(int i=0;i<data.size();i=i+4)
    {
        System.out.println(i);
        String temp =    data.get(i).toString() + "|" +
                                data.get(i+1).toString() + "|" +
                                data.get(i+2).toString() + "|" +
                                data.get(i+3).toString();
        bw1.write(temp + "\n");
    }
    bw1.close();
}
catch(IOException ioe1){}
```

Das Problem ist jetzt, dass, wenn ich die entstehende Datei mit Windows Editor öffne, werden anstelle der Zeilenumbrüche "kleine lustige Quadrate" angezeigt, die meines Wissens nach für ein nicht darstellbares Zeichen stehen(also der Zeilenumbruch)? Dementsprechend stehen dann auch alle Strings in einer einzigen Zeile. Unter WordPad klappt alles ohne Probleme, unter Word2000 auch. Dass die Dateiendung nicht *.txt oder sowas ist, dürfte dabei ja eigentlich keine Rolle spielen. 
Liegt es an meinem Code, dass der Editor ein Problem mit den Zeilenumbrüchen hat?


----------



## byte (11. Jan 2007)

Scheint wohl eher ein Problem des Editors zu sein, denn ansich ist der Code ok. Offenbar erkennt er die Codierung nicht korrekt.

Du kannst alternativ mal einen PrintWriter um den BufferedWriter legen. Dann brauchst Du kein \n einfügen sondern kannst einfach über println eine Zeile schreiben. Ist imo hübscher und vielleicht behebt es sogar das Problem.


----------



## MatthiasKnorr (11. Jan 2007)

Hi,

In Windows benötigst du ein "\r\n". In Linux reicht das "\n".
In der java.io.File Klasse gibts übrigens die richtigen Zeichen dafür. Wenn du die benutzt, brauchst du dich nicht
ums OS kümmern und mußt auch nicht recompilieren wenn du dein Prog woanders laufen lassen willst.

Grüße,
Matthias


----------



## Wildcard (11. Jan 2007)

Oder einfach einen PrintWriter nehmen


----------



## benner (11. Jan 2007)

Also ich hab mich als fauler Mensch, und das ganze sowieso nur unter Windows laufen soll, für \r\n entschieden. Danke für eure Hilfe.

@MatthiasKnorr: In die java.io.File Klasse  hab ich auch reingesehen, da hab ich vom Prinzip her das gefunden, was du meintest, aber nicht für den Zeilenumbruch, sondern für Trennzeichen und Pfadangaben...


----------



## Wildcard (11. Jan 2007)

Newline bekommst du auch so;

```
System.getProperty("line.separator");
```


----------



## MatthiasKnorr (11. Jan 2007)

Ach, haben die das schon wieder entfernt?!? 
Naja, dann so wie Wildcard beschrieben hat.

Grüße,
Matthias


----------



## thomator (11. Jan 2007)

Den Zeilenumbruch sollte man auch tunlichst so holen, wie Wildcard das beschrieben hat. Sonst is nix mit Plattformunabhängigkeit.....


----------



## byte (11. Jan 2007)

```
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("data.dat",false)));
out.println("ich bin eine zeile samt zeilenumbruch");
```

... ist eigentlich auch für Faule im Bereich des möglichen.


----------



## benner (11. Jan 2007)

Könnte man durchaus so sagen  :meld:  Hatte ich sogar, bevor ich diesen Beitrag gelesen habe, selbst so gemacht, weil ich auch mal mit PrintWriter hantieren wollte, um es mal gemacht zu haben


----------



## byte (11. Jan 2007)

An dieser Stelle mal ein Hoch aufs Dekorierer Pattern!


----------

