Absätze beim Speichern

Xym

Erfahrenes Mitglied
Ich habe in meinem programm mehere String-Arrays mit namen usw. Hinter jedem Namen steht \n wodruch ich bei der Ausgabe einen Zeilenumbruch erzeuge. Nur wenn ich alles als txt Datei abspeichere steht alles zusammen ohne Absätze.
Wie kriege ich die hin?

So speichere ich
Code:
File file = save.getSelectedFile();
          String fs = file+".txt";
          Writer fw = null;
          try
          {
           fw = new FileWriter( fs );
           for(i=0;i<anzahl;i++)
            {
             fw.write( Sname[i] );
             fw.write( Sstrasse[i] );
             fw.write( Swohnort[i] );
             fw.write( SPLZ[i] );
             fw.write( Salter[i] );
            }
          }
          catch ( IOException e )
           {
            System.err.println( "Konnte Datei nicht erstellen" );
           }
          finally
           {
            if ( fw != null )
            try { fw.close(); } catch ( IOException e ) { e.printStackTrace(); }
           }

und so öffne ich
Code:
File file = fc.getSelectedFile();
          try
          {
            br = new BufferedReader(new FileReader((file)));
            String line = null;
            line = br.readLine();
            System.out.println(line);
          }
          catch(FileNotFoundException e)
          {
            e.printStackTrace();
          }
          catch(IOException e)
          {
            e.printStackTrace();
          }
          finally
          {
            if(br != null)
            {
             try
              {
                br.close();
              }
              catch(IOException e)
              {
                e.printStackTrace();
              }
            }
          }
 
wie wäre es mal mit folgendem ansatz

\n ist der LineTerminator von UNIX
\r ist der LineTerminator von Mac
und was macht M$ wieder ... braucht gleich beide : \r\n ...

warum siehst du jetzt aber keine umbrüche in windows-editoren wenn du nur \r oder nur \n hast ... oder sogar \n\r ... ganz einfach : weil windows nunmal wirklich \r\n braucht ... Mac und Unix erkennen das und fügen nun an diesen stellen keine zwei umbrüche ein sondern nur einen *bei \n\r aber schon ! die reihenfolge ist wichtig*

wenn du jetzt einen freien FilViewer / Editor nutz der auf alle drei LineTerminatoren programmiert ist wirst du feststellen das die umbrüche schon da sind ... jedoch vom normalen M$-notepad werden diese nur nicht richtig dargestellt ...

JAVA z.b. ist auf alle 3 LineTerminatoren programmiert da es ja eine plattformunabhängige sprache ist und auch auf allen systemn gleich arbeiten soll ...
oder google mal nach "Notepad2" ... sehr geiles ding ... hat sogar Syntax-Highlightning für die gängigen sprache drin ... dort siehst du unten dann z.b. LF oder CR+LF ... das ist eine anzeige welcher LineTerminator grade im aktuellen dokument verwendet wird ...

willst du jetzt also deine TXT-files mit dem normalen M$-notepad richtig anziegen lassen musst du als LineTerminator \r\n nutzen anstatt nur \n ...
oder machast es dir einfach und lässt die umbrüche mit println von java schreiben ...


*ps : ich denke das das hier ins grundlagen-forum gehört ... mal bitte verschieben
 
Danke für die ausführliche antwort.
Habe es gerade ausprobiert und anstatt \n hinter jedem string \r\n.
Trotzdem habe ich beim speichern noch nicht den gewünschten effekt..
 
gut ... dann musst du uns mal bitte verraten was genau du mit ABSÄTZEN meinst ...
weil in aller regel sollten text/plain *also txt* unter windows mit CR+LR richtig dargestellt werden ... *unter unix mit LR und unter mac mit CR*
und du hast ja auch nur geschrieben das du LR als LineTerminator verwendet hast und dann im editor alles an ein ander geklatsch war ...
nun verwendest du CR+LR und es ist immer noch alles an ein ander geklatscht ?
oder habe ich grade allgemein ein verständnis-problem mit DEINER definition eines absatzes und dem inhalt deines posts ? ...

wenn dir der tipp mit den verschiedenen LineTerminatoren noch nicht das gewünschte ergebniss bringt dann solltest du uns mal n kleines beispiel geben *ruhig als text hier dierekt rein und nicht erst umständlich screenshots machen und die dann i-wo uppen*
 
Also ich habe Namen-Arrays, Straßen-Arrays usw.
Wenn ich die datei speichere steht dann immer in der txt Datei:

Name: Mustermann,MaxStraße: Musterstr.1Wohnort: Musterhausen.....

Ich hätte es aber gerne so:

Name: Mustermann,Max
Straße: Musterstr.1
Wohnort: Musterhausen

Damit ich die einzelnen Zeilen in die passenden String einzelnt einlesen kann.
 
Also die sauberste Lösung, das Zeichen her zu bekommen, ist diese:
Java:
String lineSeparator = System.getProperty("line.separator");
Die gibt dir je nach System die richtigen Zeichen, ist außerdem noch in Zukunft nutzbar und auf Systemen, die vielleicht nicht als Windows, Unix oder Mac durchgehen ;)

Wenn du unter Windows arbeitest würde ich mir mal Notepad++ ansehen, der kann dir nämlich anzeigen, welche lineSeparator du benutzt hast.

Um die Absätze so hinzubekommen, wie du sie haben willst könntest du deinen Code z.B. so ändern:
Java:
File file = save.getSelectedFile();
String lineSeparator = System.getProperty("line.separator");
          String fs = file+".txt";
          Writer fw = null;
          try
          {
           fw = new FileWriter( fs );
           for(i=0;i<anzahl;i++)
            {
             fw.write( Sname[i] );
             fw.write(lineSeparator);
             fw.write( Sstrasse[i] );
             fw.write(lineSeparator);
             fw.write( Swohnort[i] );
             fw.write(lineSeparator);
             fw.write( SPLZ[i] );
             fw.write(lineSeparator);
             fw.write( Salter[i] );
             fw.write(lineSeparator);
             fw.write(lineSeparator);
            }
          }
          catch ( IOException e )
           {
            System.err.println( "Konnte Datei nicht erstellen" );
           }
          finally
           {
            if ( fw != null )
            try { fw.close(); } catch ( IOException e ) { e.printStackTrace(); }
           }

Und: Ich würde (an deiner Stelle) den lineSeparator NICHT in die Variablen für Straße, Name, ... speichern. Dies erhöht die Möglichkeit, deinen Code weiter zu verwenden und außerdem verbraucht dein Programm ein bisschen weniger RAM.
 
Zurück