2017-12-14 4 views
0

Ich versuche, Text aus einer Textdatei in eine Tabelle zu schreiben, die auf dem Tisch angezeigt werden soll, wenn eine Taste gedrückt wird. Es zeigt keine Fehler an, es funktioniert einfach nicht. Kann jemand bitte erklären, warum und wie es funktioniert? Der Text ist geteilt mit;So erhalten Sie Text aus einer Textdatei und setzen ihn in eine Tabelle

 private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) 
     {           
     try { 
     BufferedReader br = new BufferedReader(new 
     FileReader("zam.txt")); 
     String r; 
     int v =0; 

     do{ 
      r = br.readLine(); 
      if(r!=null){ 
       v++; 
      } 
     }while(r!=null); 

     Object[] row = new String[v]; 

     do{ 
      r = br.readLine(); 
      if(r!=null){ 
       for (int i = 0; i < v; i++) { 

        int ix = r.indexOf(";"); 
        row[i] = r.substring(0, ix); 
        r = r.substring(ix+1); 

        int zn = r.indexOf(";"); 
        row[i] += r.substring(0, zn); 
        r = r.substring(zn+1); 

        int xn = r.indexOf(";"); 
        row[i] += r.substring(0, xn); 
        r = r.substring(xn+1); 

        int an = r.indexOf(";"); 
        row[i] += r.substring(0, an); 

        table.addRow(row); 
       } 
      } 
     }while(r!=null); 

     br.close(); 
    } catch (IOException e) { 
    } 
} 
+0

Welches Debugging haben Sie versucht? Haben Sie versucht, "r" auszudrucken? Es sieht so aus, als würdest du die Anzahl der Zeilen zählen, aber niemals den "BufferedReader" zurücksetzen – phflack

+0

Ich habe r gedruckt und es ist null. – Tbijo54

+0

* Ich drucke r und es ist null * - Ich denke, es geht nie in Ihr 'if' so. – notyou

Antwort

0

Sie sollten dies verkürzen.

private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) 
{           
    try { 
    BufferedReader br = new BufferedReader(new 
    FileReader("zam.txt")); 

    String r; 
    do{ 
     r = br.readLine(); 
     if(r!=null){ 
      String [] sline=r.split(";"); 
      table.addRow(sline);     
     } 
    }while(r!=null); 

    br.close(); 
    } catch (IOException e) { 
    } 
} 

Grund: Sie die Datei 2 mal gelesen, aber ohne den Strom zurückzusetzen. Warum?

Dann haben Sie die Anzahl der Zeilen gezählt und diese Anzahl als Anzahl der Spalten genommen, warum?

+0

Immer noch lernen Danke. – Tbijo54

0

Sie zählen die Anzahl der Zeilen in der Datei

do{ 
    r = br.readLine(); 
    if(r!=null){ 
     v++; 
    } 
}while(r!=null); 

Danach können Sie versuchen, aus der Datei zu lesen, nachdem die EOF bereits

do{ 
    r = br.readLine(); 
    if(r!=null){ 
     [...] 
    } 
}while(r!=null); 

r = br.readLine(); erreicht wird zurückkehren null, seit der EOF erreicht wurde, und überspringen Sie die Schleife


Um dies zu beheben, können Sie entweder öffnen Sie die Datei

//counting code 
br.close(); 
br = new BufferedReader([...]); 
//reading code 

Oder Sie können die Linien zu einem List statt hinzufügen, und verwenden Sie diese

BufferedReader br = new BufferedReader([...]); 
List<String> lines = new ArrayList<String>(); 
for(String line = br.readLine(); line != null; line = br.readLine()) 
    lines.add(line); 
String[] row = lines.toArray(new String[0]); 

Wenn Sie sind nur Wenn Sie die Werte zu einer Tabelle hinzufügen, ist es möglicherweise einfacher, die Datei überhaupt nicht zu speichern.

BufferedReader br = new BufferedReader([...]); 
for(String line = br.readLine(); line != null; line = br.readLine()) 
    table.addRow(line.split(";")); 
+0

Danke. Jetzt muss ich herausfinden, wie man die Wörter richtig in die Tabelle einfügt. – Tbijo54

+0

@ Tbijo54 aktualisierte Antwort, wie man das leicht macht – phflack

+0

Got it Thank you. – Tbijo54

Verwandte Themen