2017-12-14 17 views
0

テキストファイルのテキストをテーブルに配置しようとしましたが、ボタンを押したときにテーブルに表示します。それだけで動作しないエラーは表示されません。誰かが理由と方法を説明してください。テキストは、 EOFが既に返されます TextFileからテキストを取得してテーブルに配置する方法

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

r = br.readLine();

に達した後

 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

どのデバッグを試しましたか?あなたは 'r'を印刷しようとしましたか?あなたは行数を数えるように見えますが、 'BufferedReader'をリセットすることはありません – phflack

+0

私はrを印刷しました。それはnullです。 – Tbijo54

+0

*私はrを印刷し、それはnullです* - 私は決してあなたの 'if'に入ることはないと思います。 – notyou

答えて

0

これを短くする必要があります。

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) { 
    } 
} 

理由:ファイルを2回読みますが、ストリームはリセットされません。どうして?

次に、行数を数えて、この数を列数として取ったのはなぜですか?

+0

まだ学習ありがとうございます。 – Tbijo54

0

あなたは、ファイル、ファイルからの読み取りを試みるその後

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

の行数を数えますnull、EOFに達してループをスキップするため


この問題を解決するには、ファイル

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

を再開するか、それとも、代わりにListに行を追加することができ、かつ

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]); 

はあなただけならという使用しますテーブルに値を追加すると、ファイルをまったく格納しないほうが簡単かもしれません。

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

ありがとうございます。 これで、単語をテーブルに正しく配置する方法を理解する必要があります。 – Tbijo54

+0

@ Tbijo54簡単にそれを行う方法の更新された回答 – phflack

+0

ありがとうございました。 – Tbijo54

関連する問題