# BufferedReader mehrere Zeilen einlesen



## TimSkyp (25. Nov 2011)

Hallo an alle,

Ich bin grad dabei ein Programm zu schreiben, dass eine .csv Datei einließt. Die Datei soll mir dann in einer jTable angezeigt werden. Ich bin bereits soweit das mir die Titeln der Spalten in der Tabelle richtig angezeigt werden. Aber beim einlesen der Reihen lest er mir immer nur eine Reihe ein. Ich weiß nicht warum???

hier einmal mein code:


```
Pattern p = Pattern.compile("\"(.*?)\"");
        Vector<String> columnTitle = new Vector<String>();
        Vector<String> data = new Vector<String>();
        DefaultTableModel tableModel = new DefaultTableModel();
        table.setModel(tableModel);
        File file = fileChooser.getSelectedFile();

        BufferedReader in = new BufferedReader(new FileReader(file));
        String line;

        line = in.readLine();
        Matcher m = p.matcher(line);
        while (m.find()) {
            columnTitle.add(m.group(1));
        }

        for (int i = 0; i < columnTitle.size(); i++) {
            tableModel.addColumn(columnTitle.get(i));
        }
        
        while (in.ready()) {
            line = in.readLine();
            m = p.matcher(line);

            while (m.find()) {
                data.add(m.group(1));
            }

        }

        tableModel.addRow(data);
```

Zur Erklärung:
Als erstes lese ich die erste Zeile ein, diese enthält nämlich die Titeln meines Spalten. Diese füge ich dann mit einer for-Schleife als Spalten meiner Tabelle hinzu.
Danach will ich die restliche Datei einlesen bis es keine Zeile mehr gibt und diese dann in der Tabelle ausgeben.
Die Werte die für jeweils eine Spalte gedacht sind sind durch einen Beistrich von einander getrennt. Um diese zu erkennen benutz ich das Pattern "\"(.*?)\"".

Mein Problem dabei ist, dass sich in meinem Vector data nur eine Reihe befindet.

Weiß vielleicht jemand was ich falsch mache??


----------



## nrg (25. Nov 2011)

warum nicht mit split? da kannst du doch genauso mit regex arbeiten.

edit: zu deinem eigentlichen Problem: mach mal tableModel.addRow(data); in die while schleife


----------



## TimSkyp (25. Nov 2011)

Mein Problem is jetzt nicht wirklich dass das Trennen der Werte nicht funktioniert. Das funktioniert einwandfrei!

Sondern der BufferedReader hört nach einer Zeile auf mit dem Einlesen und ich versteh nicht ganz wieso!!


----------



## nrg (25. Nov 2011)

mach mal das einlesen so:


```
while ((line = in.readLine()) != null) {
            //....
        }
```

edit: imho müsste er dann aber auch nur die letzte zeile hinzufügen (bzw. in dem fall ist dann der vector viel zu groß. kp was dann genau passiert ). du musst die instanziierung von data und das addRow *in* die while-schleife packen


----------



## TimSkyp (25. Nov 2011)

:toll: cool danke 
Mit dem verschieben in die while schleife hats funktioniert

hier noch mal meine while schleife:


```
while (in.ready()) {
            data = new Vector<String>();
            line = in.readLine();
            m = p.matcher(line);

            while (m.find()) {
                data.add(m.group(1));
            }
            tableModel.addRow(data);
        }
```


----------

