textdatei speichern

BlubBlub

Bekanntes Mitglied
hi,

mit meinem editor kann ich einen text, den ich in einer JTextArea geschrieben habe mittels des .showSaveDialog speichern.
an und für sich funktioniert das speichern und auch das anschließende öffnen der datei in meinem editor.
der text der zuvor gespeichert wurde wird genau in der selben art und weise beim öffnen wieder angezeigt. die zeilenumbrüche, einrückungen etc sind alle so wie sie sein sollen.
aber wenn ich die textdatei nicht in meinem selbstgeschriebenen editor öffne, sondern mit dem windows standardeditor dann ist alles in einer zeile geschrieben.

wenn in der JTextArea steht:
test

test test

test test test

so wird es so abgespeichert:
testtest testtest test test

die zeilenumbrüchen sind also nicht zu sehen.
beim öffnen dieser datei in meinem eigenen editor funktioniert es aber wieder einwandfrei.

die frage ist, wie kann ich sicherstellen, dass im windows editor der text mit zeilenumbrüchen dargestellt wird?


Java:
	       fileMenu.add(new AbstractAction()
	       { 
	    	   { 
	    		   putValue( Action.NAME, "Speichern als..." ); 
	    		   putValue( Action.ACCELERATOR_KEY , KeyStroke.getKeyStroke("ctrl S") ); 
	    		   putValue( Action.SMALL_ICON,     new ImageIcon(MyEditor.class.getResource("/toolbarButtonGraphics/general/SaveAs16.gif")) ); 
	    	   }	 
	
	    	   public void actionPerformed( ActionEvent e )
	    	   { 
	    		   if ( fc.showSaveDialog( null ) == JFileChooser.APPROVE_OPTION )
	    		   {
	    			   File file = fc.getSelectedFile();
	    			   
	    				if(file.getName().toLowerCase().endsWith(".txt"))
	    				{
	    				    try {
	    				        FileWriter writer = new FileWriter(file);
	    				        writer.write(textArea.getText());
	    				        writer.flush( );
	    				        writer.close( );
	    				    }
	    				    catch (IOException ioe) {
	    				        ioe.printStackTrace( );
	    				    }

	    				}
	    		   }
	    	   } 
	       });
 
Zuletzt bearbeitet:
Ich bin mir sicher, dass (fast) jeder andere Texteditor außer Notepad die Zeilenumbrüche richtig anzeigen wird (zB auch WordPad). Damit es in Notepad wie erwartet aussieht, müssen die Zeilenumbrüche mit
Code:
\r\n
gesetzt werden. Normalerweise nimmt man nur ein
Code:
\n
.
 
Die JTextArea benutzt für Zeilenumbrüche ASCII 10 = LF = \n
Das kann nicht jeder Editor verstehen...was du machen könntest wären z.B.:#
Java:
					  FileWriter writer = new FileWriter(file);
					Scanner sc = new Scanner(new StringReader(textArea.getText()));
					String newline = System.getProperty("line.separator");
					while(sc.hasNextLine()){
						writer.write(sc.nextLine());
						writer.write(newline);
					}
					writer.flush( );
					writer.close( );

oder vllt auch mal hier: DefaultEditorKit (Java Platform SE 6)
das Newlines lesen *g*
 
wo muss ich die zeilenumbrüche \n bzw. \r denn setzen?

das problem ist ja ich habe den text in einer JTextArea.
ich könnte mit einem BufferedReader den kompletten text einlesen und
dann zeilen weise mit einem BufferedWriter in die datei schreiben und nach jedem einfügen
der zeile könnte ich einen zeilenumbruch einfügen.
aber das ist finde ich ein bisschen umständlich.

leider gibt es keine methode textArea.getLine() mit welcher ich mir obige vorgehensweise sparen könnte.
ich hab nur die methode textArea.getText().
 
Übrigens kannst du glaub auch die Methode JTextarea#writer benutzen und da deinen FileWriter mitreingeben...
 
@eRaaaa: okay dann hätte ich aber auch nen umweg über den scanner. ok anscheinend gibt es nicht die möglichkeit ohne der verwendung eines scanners oder readers, das gewünschte ergebnis zu erzielen.

find ich voll seltsam, dass die umbrüche einfach weggelassen werden, dadurch kann man ja texte
gar nicht so speichern wie im original sind.
 
so also ich hab das jetzt, wie eRaaaa es vorgeschlagen hat gelöst.
zusätzlich hab ich aber noch den BufferedWriter verwendet, da ich
im internet gelesen habe, dass man damit das verfahren optimiert,
da nicht soviele write() aufrufe erfolgen.

also so wie ichs verstehe sollte man den FileWriter und den FileReader, zwecks optimierung
immer in verbindung mit dem BufferedWriter und BufferedReader verwenden.

Java:
  public void actionPerformed( ActionEvent e )
	    	   { 
	    		   if ( fc.showSaveDialog( null ) == JFileChooser.APPROVE_OPTION )
	    		   {
	    			   File file = fc.getSelectedFile();
	    			   
	    				if(file.getName().toLowerCase().endsWith(".txt"))
	    				{
	    				    try {
	    				    	BufferedWriter bw = new BufferedWriter(new FileWriter (file));		//FileWrite mit BufferedWriter benutzen (optimiertes vorgehen)
	    	                    Scanner sc = new Scanner(new StringReader(textArea.getText()));		//Um in den Windows Editor die Umbrüche mitzuspeichern
	    	                    String newline = System.getProperty("line.separator");
	    	                    while(sc.hasNextLine())
	    	                    {
	    	                        bw.write(sc.nextLine());
	    	                        bw.write(newline);
	    	                    }
	    				        bw.flush( );
	    				        bw.close( );
	    				    }
	    				    catch (IOException ioe) {
	    				        ioe.printStackTrace( );
	    				    }
	    				}
	    		   }
	    	   } 
	       });
 
eine sache versteh ich nicht ganz, wieso verwendest du dort den StringReader.
Hab grad ebend in der Api geschaut und wenn man nur textArea.getText als Agrument dem Scanner übergibt funktionierts auch.

Joah keine Ahnung, habe ich mir nichts bei gedacht. War ja auch nur ein Beispiel =)
Eine andere Möglichkeit wäre ja auch noch
Java:
textArea.getText().replace("\n", System.getProperty("line.separator")
😉😳

Irgendwie funktioniert das mit dem EndOfLineStringProperty bei mir nämlich gerade auch nicht...(muss wohl am Benutzer liegen *g*)
 

Neue Themen


Zurück
Oben