Zeilenumbruch bei JTextArea

Status
Nicht offen für weitere Antworten.

comp89

Bekanntes Mitglied
hallo

ich habe eine jtextarea, wo ich einen 5 zeiligen code eingeben kann, der wird beim beenden in einem textfile gespeciehert. nun wenn ich das programm wieder starte, dann ist der ganze text da, es fehlen nur die zeilenumbrüche (also wo eine neue zeile beginnen sollte, geht der text normal weiter)

wie ich festgestellt habe, indem ich mir die textdatei angeschaut habe, ist das problem beim schreibevorgang.
ich weiß das jtextarea eigentlich ins swing board gehört, aber wegen dem speichern

beim 1.start
Hallo
Java
ist
cool

beim 2.mal

hier ist der code vom schreiben in das file:
Code:
    private void setNotizenToFile(JTextArea tarea) throws IOException{
        BufferedWriter out = new BufferedWriter(new FileWriter(new File("Kalender" + File.separator + "notizen.txt")));
        out.write(tarea.getText());
        out.flush();
        out.close();
    }
 
Wahrscheinlich liegt der Fehler im Speichern. Vremutung: Du hast sowas:
Code:
JTextArea jta = //...
BufferedReader br = //...
String s;
while ((s = br.readLine()) != null){
  jta.append (s);
}
Das wäre falsch, readLine() gibt den Zeilenumbruch nicht mit zurück.
Korrekt wäre:
Code:
jta.append (s + System.getProperty ("line.separator", "\r\n"));

Wenn du den Fehler nicht drin hast, poste einfach noch mehr Code, weil deiner stimmt.

Edit: Vergiss es, hab
wie ich festgestellt habe, indem ich mir die textdatei angeschaut habe, ist das problem beim schreibevorgang.
überlesen 😉
 
Wie sieht denn der String 'tarea.getText()' aus? Sind da irgendwelche Zeilenumbrüche (z.B. '\n') zu sehen?
 
ja wenn ich sie per System.err.println(tarea.getText()) ausgeben lasse, dann sind die umbrüche noch da
 
hier ist auch noch der code zum auselsen des files
aber wie schon weiter oben, ich bin mir 100% sicher das der fehler beim schreiben liegt

Code:
    private String getNotizenFromFile(){
        File notizenF = new File("Kalender" + File.separator + "notizen.txt");  // Erzeugt ein neues File-Objekt
        if(notizenF.exists()){      // Liefert true, wenn eine Datei mit dem bezeichneten Pfad und Namen existiert
            try{
                StringBuffer buffer = new StringBuffer();
                BufferedReader in = new BufferedReader(new FileReader(notizenF));
                for (String b;(b = in.readLine()) != null;buffer.append(b));
                in.close();
                return buffer.toString();
            }
            catch(IOException exc){   // wenn ein Fehler auftritt
                return "Datei konnte nicht gelesen werden";
            }
        }
        else{   // wenn das File nicht existiert
            new File("Kalender").mkdir();   // Versucht, das Verzeichnis anzulegen
            return "Notizen\nHier können Sie Ihre Notizen eingeben\nSie werden beim nächsten Start wieder angezeigt";
        }
    }
    
    
    private void setNotizenToFile(JTextArea tarea) throws IOException{
        BufferedWriter out = new BufferedWriter(new FileWriter(new File("Kalender" + File.separator + "notizen.txt")));
        System.err.println(tarea.getText());
        out.write(tarea.getText());
        out.flush();
        out.close();
    }
 
Code:
for (String b;(b = in.readLine()) != null;buffer.append(b));

Das ist, was ich oben geschrieben habe. Der Fehler liegt aso beim einlesen. Im Windows-Texteditor werden übrigens im Gegensatz zu JTextArea und System.out nur "\r\n" und nicht "\n" als Zeilenumbuch angezeigt, vielleicht lag das daran.
 
Illuvatar hat gesagt.:
Korrekt wäre:
Code:
jta.append (s + System.getProperty ("line.separator", "\r\n"));

Bzw.:

Code:
for (String b;(b = in.readLine()) != null;buffer.append(b + System.getProperty ("line.separator", "\r\n")));
 
also das mit dem einlesen is ganz einfach
aber...

das ganze ist eine jtextarea, zum eigeben von notizen, dabei weiß ich natürlich nicht, wann der benutzer auf enter gedrückt hat, das dürfte das einzige sein, was noch probleme macht

Code:
                                notizenT.setRows(7);                                               
                                notizenT.setColumns(20);                                          
                                notizenT.setCaretColor(Color.RED);         
                                notizenT.setFont(new Font("SansSerif", Font.PLAIN, 13));
                                notizenT.setToolTipText("Hier können Sie Ihre Notizen eingeben"); 
                                notizenT.setLineWrap(true);
                                notizenT.setWrapStyleWord(true);
                                notizenT.setVisible(true);
                            gbll1.setConstraints(scroll, gbcl1);
                            panellinks1.add(scroll);
 
tschuldigung das ich euch nochmal gestört hab,
es funktioniert danke illuvatar

ich hab nur aus versehen noch die alte version probiert
danke nochmal
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben