# Java Frame-Programm mit file-reader und file-writer



## An Ger Fi St (9. Dez 2009)

Hey, also ich bin neu hier in diesem Forum und hätte ein dringendes Anliegen. 
Also, ich habe in der Schule die Aufgabe bekommen ein Java Programm zu schreiben, welches aus einem Text-Field und 2 Buttons besteht. 
Der erste Button sollte den Inhalt des Text-Fields in einer Text-Datei speichern, mit dem zweiten Button sollte man den Inhalt aus einer Text-Datei in das Text-Field laden können.
Den Quelltext für den file-writer habe ich schon, er funktioniert auch, nur irgendwie bin ich zu blöd dafür diesen mit den Buttons zu verbinden, so dass das Programm funktioniert. Über schnelle Hilfe würde ich mich sehr freuen. Danke schonmal an alle im vorraus und das Forum ist echt spitze :toll:

Hier noch einmal der Quelltext für den file-writer, dieser soll auch für das Programm genutzt werden:


```
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class Test{

    public static void main(String[] args) throws IOException{

        File datei = new File("test.txt");
        FileWriter schreiber = new FileWriter(datei);

        schreiber.write("Beliebiger Text");
        schreiber.close();

    }
}
```


----------



## eRaaaa (9. Dez 2009)

hi und willkommen !! 



An Ger Fi St hat gesagt.:


> Den Quelltext für den file-writer habe ich schon, er funktioniert auch, nur irgendwie bin ich zu blöd dafür diesen mit den Buttons zu verbinden, so dass das Programm funktioniert.



also das ist ja noch nicht sonderlich viel 
wo ist der frame? wo sind die buttons + textfeld? 
bevor du dir gedanken machst, wie du aktionen an einen button hängst, solltest du dochj vllt erstmal den frame + buttons erstellen? oder gibts da auch schon probleme? wenn ja, wo konkret?


----------



## An Ger Fi St (9. Dez 2009)

Achso, vergessen mitzuposten 
Hier nocheinmal der Quelltext, übrigens bemerk ich oben gerade nen Tippfehler, der Text soll nicht in nem Textfield, sondern in einer Textarea stehen, aber das ist ja nur unwesentlich anders denke ich mal 


```
import java.awt.*;
import java.awt.event.*;

public class schule extends Frame {

  private TextArea Text = new TextArea("", 1, 1, TextArea.SCROLLBARS_NONE);
  private Button Erstellen = new Button();
  private Button Laden = new Button();


  public schule(String title) {

    super(title);
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent evt) { dispose(); }
    });
    int frameWidth = 300;
    int frameHeight = 300;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    Panel cp = new Panel(null);
    add(cp);


    Text.setBounds(24, 16, 249, 185);
    Text.setText("(Strings)");
    cp.add(Text);
    Erstellen.setBounds(32, 216, 97, 33);
    Erstellen.setLabel("Erstellen");
    Erstellen.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        Erstellen_ActionPerformed(evt);
      }
    });
    cp.add(Erstellen);
    Laden.setBounds(160, 216, 97, 33);
    Laden.setLabel("Laden");
    Laden.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        Laden_ActionPerformed(evt);
      }
    });
    cp.add(Laden);


    setResizable(false);
    setVisible(true);
  }


  public void Erstellen_ActionPerformed(ActionEvent evt) {

  }

  public void Laden_ActionPerformed(ActionEvent evt) {

  }



  public static void main(String[] args) {
    new schule("schule");
  }
}
```


----------



## eRaaaa (9. Dez 2009)

ah okay 

kurze anmerkung bzw frage:

sollt ihr awt statt swing benutzen? habt ihr das so gelernt, oder hast du dir das quasi "ergooglet" o.ä. ?


also du hast ja schon listener und die rufen ja auch schon zwei methoden auf, das sieht doch ganz gut aus. normalerweise könntest du jetzt einfach den code aus deinem 1. post, also die sache mit dem filewriter, einfach in die Erstellen_ActionPerformed schreiben?! 

anstelle von write("Beliebiger Text") schreibst du dann write(Text.getText()) !
in der Laden_ActionPerformed musst du dann aus der datei lesen und halt mit Text.setText(...) setzen


----------



## An Ger Fi St (9. Dez 2009)

Eigentlich haben wir immer mit awt gearbeitet... Der erste Button ist im Prinzip auch nicht so das Kernproblem, ich hab nur ehrlich gesagt keine Ahnung, wie ich den Text aus einer Datei auslesen soll und diese dann einfügen kann ???:L Hab dazu auch schon einiges gegooglt, bin aber irgendwie daraus nicht schlau geworden :rtfm: Vielleicht hast du ja einen "Tipp", wie man so eine Textdatei auslesen kann. Achso, übrigens danke für die schnellen Antworten, die Seite ist echt spitze :toll:


----------



## eRaaaa (9. Dez 2009)

ich würds ja mit der scanner klasse machen  
deine textarea hat auch eine methode append(), mit der du text anhängen kannst.
ich würds vllt so machen irgendwie:

```
public void Laden_ActionPerformed(ActionEvent evt) {
	try {
	    Scanner in = new Scanner(new File("test.txt"));
	    Text.setText("");
	    while (in.hasNextLine()) {
		Text.append(in.nextLine());
		Text.append("\n");
	    }
	} catch (FileNotFoundException e) {
	    e.printStackTrace();
	}
    }
```

kleiner tipp: ich würde da noch einen scrollpane einfügen ( falls der text mal länger wird, als die area groß ist ;D ) + (variablen besser so bennen: dasIstEineVariable  )

gruß


----------



## An Ger Fi St (9. Dez 2009)

Ich merke gerade, dass das Einfügen doch nicht ganz so einfach ist, wie ich dachte... Habe es jetzt so versucht wie vorgeschlagen, bekomme allerdings einen Error, siehe Post ;(


```
public void Erstellen_ActionPerformed(ActionEvent evt);main(String[] args) throws IOException; {
          

        File datei = new File("test.txt");
        FileWriter schreiber = new FileWriter(datei);

        schreiber.write(Text.getText());
        schreiber.close();

    

  }
```
Error:
schule.java:57:59: invalid method declaration; return type required


----------



## An Ger Fi St (9. Dez 2009)

Das Problem ist nur, dass wir bisher noch nicht mit der Scanner Klasse gearbeitet haben, und ich das Programm auch einigermaßen gut erklären können sollte


----------



## eRaaaa (9. Dez 2009)

An Ger Fi St hat gesagt.:


> Ich merke gerade, dass das Einfügen doch nicht ganz so einfach ist, wie ich dachte... Habe es jetzt so versucht wie vorgeschlagen, bekomme allerdings mehrere Errors, siehe Post ;(
> 
> Error:
> schule.java:58:10: illegal start of expression
> public static void main(String[] args) throws IOException{



okay, du hast mich ziemlich "wörtlich" genommen 
die main methode soll da natürlich nicht mit rein ^^

```
public void Laden_ActionPerformed(ActionEvent evt) {
	File datei = new File("test.txt");
	FileWriter schreiber;
	try {
	    schreiber = new FileWriter(datei);
	    schreiber.write(Text.getText());
	    schreiber.close();
	} catch (IOException e) {
	    e.printStackTrace();
	}
    }
```



> Das Problem ist nur, dass wir bisher noch nicht mit der Scanner Klasse gearbeitet haben, und ich das Programm auch einigermaßen gut erklären können sollte



hmm, okay, dann solltest du vllt in deine unterlagne schauen, raussuchen was der dozent/lehrer zum thema I/O gesagt hat, und die entsprechende klasse/methode suchen zum auslesen von dateien 
an sich ist das aber immer ziemlich ähnlich, du durchläufst quasi die datei, und liest zeilenweise meinetwegen aus, dann kannst du, wie bereits erwähnt, mittels .append den text/zeile der textarea anhängen !


----------



## An Ger Fi St (9. Dez 2009)

Hm, die Sache mit dem raussuchen könnte sich als schwierig erweisen, unser Lehrer ist momentan krank und wollte, dass wir uns selbstständig mit der Seite "Java ist auch eine Insel" über den file-reader und writer informieren, nur irgendwie bin ich aus dem file-reader nicht ganz so schlau geworden


----------



## eRaaaa (9. Dez 2009)

naja, was erwartest du jetzt, soll ich dir sagen? (die Scanner-klasse magst du ja nicht ;D )
also wenn dein lehrer sagt, ihr sollt euch selber damit beschäftigen..nunja. 
imo hast du zwei möglichkeiten:

a) du benutzt scanner, wo der code nur aus paar zeilen besteht (und sich jeder merken kann)

```
Scanner in = new Scanner(new File("PFAD")) //kann man sich leicht merken
 while (in.hasNextLine()) {
         //  in.nextLine() =  zeile
 }
```

oder du benutzt z.b. den bufferedreader :autsch:

b)
	
	
	
	





```
BufferedReader in = new BufferedReader(new FileReader("PFAD"));
	String str;
	while ((str = in.readLine()) != null) {
	    //str =  zeile
	}
```

die scanner klasse wird in der insel übrigens auch gelobt *g*
Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 4.7.2 Die Klasse Scanner


----------



## An Ger Fi St (9. Dez 2009)

Also erstmal vielen Dank für die superschnelle Antwort, ich werde mir den Artikel über die Scannerklassen mal durchlesen, und außerdem hab ich Gott sei Dank noch übers Wochenende Zeit mich mit dem Problem zu beschäftigen, aber trotzdem nochmal, echt super und nett von dir für die schnelle Hilfe, wenn ich nach dem Durchlesen des Artikels noch i-welche Fragen habe melde ich mich


----------



## An Ger Fi St (9. Dez 2009)

Also die Scanner Class an sich hab ich ungefähr verstanden, wenn ich das Ganze jedoch in mein Programm einsetzen möchte erscheint dieser Fehler: 
schule.java:81:9: cannot find symbol
symbol  : class Scanner
location: class schule
Scanner in = new Scanner(new File("test.txt"));

Was mach ich falsch? :autsch:


----------



## An Ger Fi St (9. Dez 2009)

Ok, Problem mit Scanner Class selber gelöst (import java.util.Scanner; ) Allerdings habe ich immer noch einen Fehler und zwar: 
schule.java:88:14: cannot find symbol
symbol  : class FileNotFoundException


Was ist nun los?


----------



## eRaaaa (9. Dez 2009)

/edit: da genauso: import java.io.FileNotFoundException;


----------



## An Ger Fi St (9. Dez 2009)

Ok auch das hat sich geklärt, statt FileNotFoundException, einfach IOException eingesetzt  Nochmals vielen, vielen Dank für die Hilfe!


----------



## An Ger Fi St (9. Dez 2009)

Kann man da noch was verbessern (z.B. Scrollbar?) Und lässt es sich vermeiden, dass beim Öffnen der Datei Strings in der Textarea steht?


----------



## eRaaaa (9. Dez 2009)

An Ger Fi St hat gesagt.:


> kann man da noch was verbessern (z.B. Scrollbar?) Und lässt es sich vermeiden, dass beim Öffnen der Datei Strings in der Textarea steht?



klaro, musst nur die zeile (34) 
	
	
	
	





```
Text.setText("(Strings)");
```
auskommentieren ;D

scrollbar? 
vllt solltest du einfach mal zeile 11 abändern

```
private TextArea Text = new TextArea("", 1, 1, TextArea.SCROLLBARS_BOTH);
```

du hast den code nicht selbst gesachrieben oder? 

was kann man sonst noch verbessern? mhm, so sachen wie:
klassen schreibt man eig. groß (schule=>Schule)

 private Button Erstellen = new Button();  =>  private Button erstellen = new Button();
(also variablen in form von : dasIstEine... schreiben)

naja, ansonsten ist alles auslegungssache denk ich


----------



## An Ger Fi St (9. Dez 2009)

Naja es gibt in meinem Java-Editor beim Frame die Möglichkeit eine vorprogrammierte "Rohfläche" zu nutzen und mittels kleinen Apps am Rande (z.B. Button, Textarea usw.) diese dann sofort einfügen zu können, so dass der Quellcode auch schon erscheint  Den Quellcode für den file-writer hat uns unser Lehrer noch halb mit auf den Weg gegeben, ansonsten halt "Java ist auch eine Insel" FTW  Auf jeden Fall schonmal vielen Dank für deine Hilfe, du hast mir mein Wochenende gerettet :applaus:


----------



## An Ger Fi St (10. Dez 2009)

Also, nachdem die Scanner Class super funktioniert hat, möchte ich die Auslesung des Textes doch gerne noch einmal mit dem file-reader ausprobieren. Leider schaffe ich es nicht, die Ausgabe in der Textarea zu bekommen? Hat einer vll ne Idee? ???:L


```
import java.awt.*;
import java.awt.event.*;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;



public class Blupp extends Frame {


  // Anfang Attribute
  private TextArea Text = new TextArea("", 1, 1, TextArea.SCROLLBARS_BOTH);
  private Button button1 = new Button();
  // Ende Attribute



  public Blupp(String title) {

    super(title);
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent evt) { dispose(); }
    });
    int frameWidth = 300;
    int frameHeight = 300;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    Panel cp = new Panel(null);
    add(cp);


    Text.setBounds(16, 8, 257, 169);
    Text.setText("(Strings)");
    cp.add(Text);
    button1.setBounds(88, 208, 121, 33);
    button1.setLabel("button1");
    button1.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        button1_ActionPerformed(evt);
      }
    });
    cp.add(button1);


    setResizable(false);
    setVisible(true);

    // Anfang Komponenten
    // Ende Komponenten
  }

  // Anfang Methoden


  public void button1_ActionPerformed(ActionEvent evt) {
    try{
          FileReader fr = new
            FileReader("Ausgabe.txt");
            Text.setText("");
             int c;
              while ((c=fr.read())!=-1)

                fr.close();
    }
    catch (IOException e) {
        e.printStackTrace();
  }
  // Ende Methoden
  }



  public static void main(String[] args) {
    new Blupp("Blupp");
  }
}
```


----------

