2011-04-10 51 views
0

我試圖從我在GUI中創建的JTextArea中的文本文件顯示信息。我已經想出瞭如何從文件中獲取信息到JTextArea,但它只抓取文件的最後一行。我需要顯示所有的行。我一直在改變循環,但無法弄清楚這一點。任何幫助將不勝感激。下面就來看看我的代碼:使用FileReader只顯示最後一行文本文件?

public TextArea() { 
    initComponents(); 


    try { 
     FileReader one = new FileReader ("info.txt"); 
     BufferedReader buf = new BufferedReader(one); 

     String line = ""; 
     StringTokenizer st = null; 
     int lineNumber = 0, tokenNumber = 0; 
     //textArea.setText(line); 

     while ((line = buf.readLine()) != null) { 
      lineNumber++; 

      //break comma separated line using "," 
      st = new StringTokenizer(line, ","); 

      while (st.hasMoreTokens()) { 
       //display csv values 
       tokenNumber++; 
       line = ("Title: " + st.nextToken() 
         + "\n" + "Make:" + st.nextToken() 
         + "\n" + "Model:" + st.nextToken() 
         + "\n" + "Year:" + st.nextToken() 
         + "\n" + "Price:" + st.nextToken() 
         + "\n" + "Notes:" + st.nextToken() 
         + "\n" + "Details:" + st.nextToken() 
         + "\n"); 

       textArea.setText(line); 
      } 

      //reset token number 
      tokenNumber = 0; 
      //textArea.setText(line); 
     } 

    } catch (FileNotFoundException e) { 
     JOptionPane.showMessageDialog(this, "File not found"); 
    } catch (IOException e){ 
     JOptionPane.showMessageDialog(this, "Data not read"); 
    } 

回答

1

看看你的代碼:

while (st.hasMoreTokens()) { 
      //display csv values 
      tokenNumber++; 
      line = ("Title: " + st.nextToken() 
        + "\n" + "Make:" + st.nextToken() 
        + "\n" + "Model:" + st.nextToken() 
        + "\n" + "Year:" + st.nextToken() 
        + "\n" + "Price:" + st.nextToken() 
        + "\n" + "Notes:" + st.nextToken() 
        + "\n" + "Details:" + st.nextToken() 
        + "\n"); 

      textArea.setText(line); 
     } 

每當你發現你設置爲最後一個記號找到textarea的VAL一個新的令牌。 所以顯然文本區域將只顯示最後一行。 你可以嘗試像這樣:

textArea.setText(textArea.getText() + line); 
+0

哇,謝謝一堆。那就是訣竅。 – rjdelight 2011-04-10 17:49:21

+0

最好是使用StringBuilder來連接所有行,並從'while'循環的外部執行'textArea.setText(stringBuilder.toString())' – RonK 2011-04-10 18:00:59

+0

此外 - 內部'while'循環是個問題 - 你的條件是'while(st.hasMoreTokens())',然後你從標記器中逐個彈出特定的標記。但是你真正期望的是,這個循環每個tokanizer運行一次 - 所以'if'會比'while'更好。 – RonK 2011-04-10 18:02:46

0

我想你是重寫線變量。

line+=... 

連接,然後設置連接在循環外部的整行的值。

0
while (st.hasMoreTokens()) { 
      //display csv values 
      tokenNumber++; 
      line = line +"\n"+("Title: " + st.nextToken() 
        + "\n" + "Make:" + st.nextToken() 
        + "\n" + "Model:" + st.nextToken() 
        + "\n" + "Year:" + st.nextToken() 
        + "\n" + "Price:" + st.nextToken() 
        + "\n" + "Notes:" + st.nextToken() 
        + "\n" + "Details:" + st.nextToken() 
        + "\n"); 


     } 
textArea.setText(line); 
相關問題