Datei öffnen und Text in JTextArea einfügen bzw. Datei speichern in txt-File

freihsve

Grünschnabel
Hallo zusammen

Leider versuche ich im Moment vergeblich über ein JMenuItem eine Textdatei in eine JTextArea zu laden bzw. den Text welcher in der JTextArea steht in eine Textdatei zu speichern.
Die GUI steht, Text kann eingeben werden, aber den Text speichern bzw. laden geht einfach nicht.

Kann mir da jemand helfen? leider hat mir bis jetzt kein Foreneintrag geholfen...
 
Hallo!

Schau mal hier:
Java:
/**
 * 
 */
package de.tutorials;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;

/**
 * @author Tom
 * 
 */
public class SaveAndLoadTextIntextAreaExample extends JFrame {

    JTextArea textArea;

    JButton btnLoad;

    JButton btnSave;

    File file = new File("c:/data.txt");

    public SaveAndLoadTextIntextAreaExample() {
        super("SaveAndLoadTextIntextAreaExample");
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        textArea = new JTextArea(20, 40);
        btnLoad = createJButtonWith("Load", new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                try {
                    textArea.read(new FileReader(file), null);
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        });

        btnSave = createJButtonWith("Save", new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                try {
                    textArea.write(new FileWriter(file));
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
        });
        
        add(textArea,BorderLayout.NORTH);
        add(btnLoad,BorderLayout.CENTER);
        add(btnSave,BorderLayout.SOUTH);
        
        pack();

        setVisible(true);
    }

    private JButton createJButtonWith(String caption,
            ActionListener actionListener) {
        JButton btn = new JButton(caption);
        btn.addActionListener(actionListener);
        return btn;
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        new SaveAndLoadTextIntextAreaExample();
    }

}

Gruß Tom
 
  • Gefällt mir
Reaktionen: Orb
danke für die antwort. soweit so gut, was mir allerdings die grössten probleme macht ist, dass ich es leider nicht hinkriege das ganze über den speichern dialog bzw öffnen dialog in eine datei bzw in die jtextarea zu kriegen. der dialog geht zwar auf, speichern/öffnen kriege ich leider nicht hin.

ich habe jetzt mal deinen code genommen und ausprobiert. wäre eigentlich ja genau das was ich gerne hätte. die load methode habe ich erweitert aber irgendwie ist genau das jetzt ja noch der wurm drin.

btnLoad = createJButtonWith("Load", new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
JFileChooser jf = new JFileChooser();
int returnval = jf.showDialog(null, "öffne Datei...");
File file = new File(jf.getSelectedFile(), null);
textArea.read(new FileReader(file), null);
} catch (Exception ex) {
ex.printStackTrace();
}
}
});

irgendwie kriegt java das file nicht in die jtextarea und ich weiss nicht was da noch fehlt. auch die javadoc von sun hilft mir nicht *verwirrt*
 
Zuletzt bearbeitet:
Erstmal solltest du dem FileChooser nen Komponenten übergeben über der er sich öffnen kann. Z.B. deinen eigenen frame. Dann den Rückgabewert prüfen. Es kann auch sein, dass der User Cancel gedrückt hat und gar nicht möchte dass seine Auswahl berücksichtigt wird.

showText(File) ist hier etwas länger als in der vorherigen Version. Kann man eventuell besser debuggen. Kanns du ja mal testen.

Bei mir funktioniert der Code soweit auf jeden Fall.

Java:
protected void load() {
	final JFileChooser fc = new JFileChooser();
	int returnVal = fc.showOpenDialog(jFrame);

      if (returnVal == JFileChooser.APPROVE_OPTION) {
          File file = fc.getSelectedFile();
          showText(file);
      }
}

private void showText(File file){
	StringBuffer buf = new StringBuffer();
	if(file.exists( )){
		try {
			BufferedReader reader = new BufferedReader(new FileReader(file));
			String line = "";
			while((line = reader.readLine( )) != null){
				buf.append(line+"\n");
			}
			reader.close( );
		}
		catch (FileNotFoundException e) {
			e.printStackTrace( );
		}
		catch (IOException e) {
			e.printStackTrace( );
		}
	}
	this.jTextArea.setText(buf.toString( ));
}

protected void save() {
	final JFileChooser fc = new JFileChooser();
	int returnVal = fc.showSaveDialog(jFrame);

      if (returnVal == JFileChooser.APPROVE_OPTION) {
          File file = fc.getSelectedFile();
          saveText(file);
      }
}

private void saveText(File file) {
	try {
		FileWriter writer = new FileWriter(file);
		String text = this.jTextArea.getText( );
		writer.write(text);
		writer.flush( );
		writer.close( );
	}
	catch (IOException e) {
		e.printStackTrace( );
	}
}
 
  • Gefällt mir
Reaktionen: Orb
vielen dank

jetzt funktionierts! ich muss zwar noch genau anschauen welche zeile genau was macht aber ich bin froh das ich eine funktionierende version habe.
 
Zurück