Probleme beim Schreiben und Lesen von Dateien
-
Hallo,
hatt hier schon mal eine ähnliche Frage gestellt.
Habe Verständnisproblemen beim Umgang mit den Writern und Readern.
Will einen einfachen Texteditor, wie den von Windows, programmieren.
Er soll die eine BufferedWriter/File Writer Dekoration soll die JTextAreaAuslesen und in eine vorgegebene Textdatei, hier test.txt, schreiben. Hier mal ein Ausschnitt des Codes.... throws IOException
JTextArea textarea = new JTextArea(); File file = new File("c:\test.txt"); file.createNewFile(); BufferedWriter buffwr = new BufferedWriter (new FileWriter(file)); buffwr.write(textarea.getText()); buffwr.close();
Das ganze klappt auch, doch öffne ich die Datei im TextEditor oder einem andere Editor, zeigt es bei mehreren Zeilen in der JTextArea folgendes an:
blablabla [] blablabla [] blablabla
Alles ohne Zeilenumbruch. Habe ein Beispielprogramm in der Netbeans IDE gefunden, bei dem das ebenfalls auftritt. Allerdings ließt er die Datei wieder richtig ein. Er schreint aber irgendwie mit reinen Byte-Streams, was ich aber nicht will. Bei mir mit folgenden Code klappt es nicht:
BufferedReader buffrd= new BufferedReader(new FileReader(file)); String output = buffwr.readLine(); testarea.setText(output);
Es wird nur die erste Zeile Text angezeigt. Ich habe sowohl beim Speichern als auch beim Schreiben versucht; mit Schleifen, Arrays, Property("line.separator") usw. Es funktioniert nichts. Er soll einfach nur mit Zeilenschaltungen abspeichern, wie er es auf der JTextArea anzeigt, und zwar so , dass ich es dementsprechend mit jedem x beliebigen TextEditor anschauen kann. Außerdem soll er die Datei wieder vernünftig auf der TextArea anzeigen.
Kann mir bitte wer helfen, brauche dringend eine Lösung für das Problem. Danke.
-
Ich mache es immer so:
// Datei schreiben JTextArea textarea = new JTextArea(); File file = new File("c:\\test.txt"); String derText = textarea.getText(); BufferedWriter buffwr = new BufferedWriter (new FileWriter(file)); buffwr.write(derText, 0, derText.length()); buffwr.close(); // Datei lesen BufferedReader buffrd= new BufferedReader(new FileReader(file)); String output; while((output = buffwr.readLine()= != null) { testarea.append(output); testarea.append("\n"); }
-
So habe ich das mittlerweile auch hinbekommen,
nur das ich beim auslesen der Datei dentextarea.append(System.getProperties().getProperty("line.separator"));
nehmen, um das Plattformunabhängig zu machen.
Das Problem ist aber folgendes. Ich will ja nicht nur mit meinem
eigenen Texteditor die Textdateien öffnen können, was ja jetzt gottseidank
funzt, sondern mit jedem beliebigen Texteditor auf jeder Plattform.
Wenn ich aber eine Datei mit der von dir gegebenen Lösung bzw. mit der
von mir erweiterten Lösung schreibe und die txt Datei dann beispielsweise
mit dem MS TextEditor öffnen bekomme ich folgenden Mist:blablabla [] blablabla [] blabla bla []
Alles in einer Zeile. Die Zeilenumbrüche werden mit [] dargestellt.
Die Frage ist, wie ich die Datei schreiben muss, um mit jedem Editor
eine korrekte Darstellung zu bekommen.Das das was mit meiner erweiterten Lösung beim Lesen der Datei mit Proberty zu tun hat, dürfte ein Ansatz sein. Wenn ich zum Beispiel mit MS TextEditor eine txt schreibe und sie mit der Variante
textarea.append("\n"); // für Unix, Linux
öffne bekomme ich Mist auf meiner JTextArea. Aber mit dem Zeilen Umbruch \r\n
funktioniert es. Wenn ich den line.separator verwende funktioniert es, egal auf welcher Plattform ich mich befinde und mit welchem Editor ich die txt geschrieben habe.Leider hab ich bis jetzt nichtz herausgefunden wie ich beim Schreiben auch den line.separator verwenden kann. Dann müsste auch jeder Editor die mit meinem Editor erstellten Dateien korrekt ausgeben können. Weiß jemand einen Lösungsansatz?
-
Tut mir Leid, dass es so lange gedauert hab, bis ich antworte. Bei mir funktioniert das folgendermassen:
import javax.swing.*; import java.io.*; public class schreiben extends JFrame { schreiben() { setSize(600, 400); setDefaultCloseOperation(EXIT_ON_CLOSE); // Datei schreiben JTextArea textarea = new JTextArea(); getContentPane().add(textarea); textarea.append("Hallo"); textarea.append(System.getProperties().getProperty("line.separator")); textarea.append("Zeile1"); textarea.append(System.getProperties().getProperty("line.separator")); textarea.append("Zeile2"); textarea.append(System.getProperties().getProperty("line.separator")); textarea.append("Zeile3"); File file = new File("c:\\test.txt"); String derText = textarea.getText(); try { BufferedWriter buffwr = new BufferedWriter (new FileWriter(file)); buffwr.write(derText, 0, derText.length()); buffwr.close(); } catch(IOException ignore) {} setVisible(true); } public static void main(String args[]){ new schreiben(); } }
Dann klappt es auch mit Notepad!
-
JTextArea erbt doch die Methode read der Superklasse JTextComponent.
read(Reader in,Object desc);
Mit dieser Methode würde es doch viel einfacher gehen.