# Aus einer JList den Inhalt als Textdatei speichern



## JonnieWalker (22. Apr 2010)

Hallo Leute, ich hab mal eine Frage.
Ich will meine Liste die ich mir in der Jlist anzeigen lasse also die Worte, diese Worte nochmal als Textdatei abspeichern.
Mit der Methode die ihr seht schreibt er mir eine leere Textdatei.

Also hier aus der Klasse Datenbanken.

Die deklaration der jList.

```
ArrayList<String> liste = new ArrayList<String>();
```

Hier die Methode wo ich mir die Worte eigendlich schreiben will.
Die gibt mir einen leeren String zurück:S

```
public void StoppExportierenZwei() {

        String tfTabellenAbsp = FensterZusammengeführteListenExp.tfTabellenAbsp.getText();
        BufferedWriter datei = null;
        Component rootPane = null;
        try {
            String file = tfTabellenAbsp;
            datei = new BufferedWriter(new FileWriter(file));
            for (int i = 0; i < liste.size(); i++) {
                datei.write(liste.get(i).toString());
                datei.newLine();
                System.out.println(liste);
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            try {
                System.out.println(liste);
                datei.close();
            } catch (Exception ex) {
                JOptionPane.showMessageDialog(rootPane, "Bitte einen gültigen Pfad und Dateinamen angeben");
                return;
            }
        }
    }
```

Und hier der Button aus dem Fenster der mir die leere Texdatei erzeugt:S

```
private void NeueTabExpActionPerformed(java.awt.event.ActionEvent evt) {                                           

        if(tfTabellenAbsp.getText().equals("")){
            JOptionPane.showMessageDialog(this, "Bitte Pfad Zielpfad angeben");
            return;
        }
        db.StoppExportierenZwei();
        JOptionPane.showMessageDialog(this, "Liste exportiert");
        System.out.println(db.liste);
    }
```

Was mach ich falsch?
Wie sag ich ihm das er aus der JList aus schreiben soll und nicht aus der Methode weil er stört sich an 

```
for (int i = 0; i < liste.size(); i++) {
                datei.write(liste.get(i).toString());
                datei.newLine();
```
Danke schon mal im vorraus


----------



## Michael... (22. Apr 2010)

Vielleicht ist die Liste auf die liste referenziert leer? Lass doch einfach mal liste.size() vor der for-Schleife ausgeben.


----------



## JonnieWalker (22. Apr 2010)

Hi Michael er gibt mir eine 0 aus mit dem liste.size();
Was mach ich jetzt?
Es ist ja so ich importiere mit einer Methode 2 Textdateien in diese JList.
Er zeigt mir die Datensätze in der jList an.
Und jetzt will ich diese JList nochmal abspeichern also exportieren und er gibt mir 0 aus:S
Kannst du mir vllt evtl sagen woran das liegt?


----------



## Sempah (22. Apr 2010)

labi hat gesagt.:


> Die deklaration der jList.
> 
> ```
> ArrayList<String> liste = new ArrayList<String>();
> ```



JList !=  ArrayList
Kann ja gut sein, dass deine JList gefüllt ist, aber deine liste (ArrayList) ist wohl leer.


----------



## Michael... (22. Apr 2010)

Eventuell hast Du eine mehrfache Deklaration von liste, z.B. als lokale und globale Variable, oder...

Wenn Du die Einträge aus der JList abspeichern willst. Lies doch die Einträge z.B. über deren Model aus.


----------



## JonnieWalker (22. Apr 2010)

naja die arraylist ist oben deklariert
mit der hol ich mir,also die füll ich mit den importierten daten aus der textdatei.
ich übergebe diese arraylist"liste" meiner jlist.

der hat 96 datensätze
aber wenn ich diese liste wieder nehme und schreiben will dann macht er es nicht.

Was jemand wie ich den Inhalt einer jList als textdatei schreiben kann????????


----------



## JonnieWalker (22. Apr 2010)

Oder mal anders rum gefragt.

Ich habe eine Methode und dort eine ArrayList.
Die fülle ich mit Daten.

Jetzt hab ich eine zweite Methode und will ihm sagen nimm die ArrayList aus der ersten Methode
die schon gefüllt ist.

Beide Methoden sind in der selben Klasse!


----------



## Michael... (22. Apr 2010)

Wenn es sich in beiden Methoden um die *selbe* Liste handelt: Wird diese in anderen Methoden evtl. bearbeitet/geleert? Oder handelt es sich bei den Listen doch, um unterschiedliche Referenzen?

Alternativ: Wenn Du auf die JList zugreifen kannst, kommst Du über getModel() ans Model, dieses bietet die Methoden getSize() und getElementAt(int index) mit der man in einer Schleife die Listeneinträge auslesen könnte.


----------



## Sempah (22. Apr 2010)

erzeuge eine globale Variable, auf welche beide Methoden zugreifen können.


```
class Test {

  String blub;

  void methode1() {
    blub ...
  }

  void methode2() {
    blub ...
  }

}
```


----------



## JonnieWalker (22. Apr 2010)

Also guck mal hier sidn beide Methoden.

In der Klasse Datenbank die dekleration der ArrayList:

```
ArrayList<String> liste = new ArrayList<String>();
```


Die erste Methode importiert mir die Wörter in meine ArrayList "liste". 
Damit hol ich mir zwei Texdateien und lass sie mir anzeigen.
Das klappt.


```
public void StoppImportZweiListen() {

        String tfTabellenName = FensterListen.tfListe1Import.getText();
        String tfTabellenName2 = FensterListen.tfListe2Import.getText();

        BufferedReader datei = null;
        BufferedReader datei2 = null;
        try {
            String file = tfTabellenName;
            String file2 = tfTabellenName2;
            datei = new BufferedReader(new FileReader(file));
            datei2 = new BufferedReader(new FileReader(file2));
            String line;
            String line2;
            while ((line = datei.readLine()) != null && (line2 = datei2.readLine()) != null) {
                liste.add(line);
                liste.add(line2);
                if (!(line == null) && (!(line2 == null))) {
                }
            }
            System.out.println(liste.size());
            datei.close();
            datei2.close();
        } catch (Exception ex) {
            ex.printStackTrace();

        }
    }
```

Wenn ich diese ArrayListe in der Methode public void StoppImportZweiListen() deklariere
und oben rausnehme, wie sag ich dieser Methode:

```
public void StoppExportierenZwei() {
        String tfTabellenAbsp = FensterZusammengeführteListenExp.tfTabellenAbsp.getText();
        BufferedWriter datei = null;
        Component rootPane = null;
        try {
            String file = tfTabellenAbsp;
            System.out.println(liste.size());
            datei = new BufferedWriter(new FileWriter(file));
            for (int i = 0; i < liste.size(); i++) {
                datei.write(liste.get(i).toString());
                datei.newLine();
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            try {
                datei.close();
            } catch (Exception ex) {
                JOptionPane.showMessageDialog(rootPane, "Bitte einen gültigen Pfad und Dateinamen angeben");
                return;
            }
        }
    }
```
 das diese "liste" aus der Methode dadrüber kommt.
Dann wird die nämlich auch gefüllt sein.

Hoffe ich bring euch nicht zu sehr durcheinander:S
Danke


----------



## Michael... (22. Apr 2010)

Hinweis zur ersten Methode:
wenn die Dateien unterschiedlich viele Zeilen haben, werden bei dieser Bedingung die letzten Zeilen der "längeren" Datei ignoriert und nicht in die Liste mit eingefügt!


labi hat gesagt.:


> ```
> while ((line = datei.readLine()) != null && (line2 = datei2.readLine()) != null) {
> ```



Du hast doch gesagt 
	
	
	
	





```
liste.size()
```
liefert in der zweiten Methode 0. Dann muss in der Zwischenzeit etwas mit *liste* passiert sein.


----------



## JonnieWalker (22. Apr 2010)

ja also er macht in der ersten Methode alles richtig.
ihc hab ein zähler der zählt mir die datensätze und es kommt imer das richtige.

mich wundert nur das "liste" plötzlich dann leer ist:S


----------



## Michael... (22. Apr 2010)

labi hat gesagt.:


> mich wundert nur das "liste" plötzlich dann leer ist


Genau das gilt es heraus zufinden ;-)


----------



## JonnieWalker (23. Apr 2010)

ja genau das werd ich machen
mit euerer hilfe


----------



## Michael... (23. Apr 2010)

labi hat gesagt.:


> mit euerer hilfe


Dir ist aber schon klar, dass Du der Einzige bist der das herausfinden.
Du hast ja den Code geschrieben und bist der einzige der ihn komplett kennt.


----------



## JonnieWalker (23. Apr 2010)

Hi, so Problem gelöst.
Es lag an der übergabe der Klasse Datenbank();

Datenbank db = new Datenbank();
das war falsch!!!!!!!!

Richtig:
Einfach nur Datenbank db;


----------

