我試圖從我在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");
}
哇,謝謝一堆。那就是訣竅。 – rjdelight 2011-04-10 17:49:21
最好是使用StringBuilder來連接所有行,並從'while'循環的外部執行'textArea.setText(stringBuilder.toString())' – RonK 2011-04-10 18:00:59
此外 - 內部'while'循環是個問題 - 你的條件是'while(st.hasMoreTokens())',然後你從標記器中逐個彈出特定的標記。但是你真正期望的是,這個循環每個tokanizer運行一次 - 所以'if'會比'while'更好。 – RonK 2011-04-10 18:02:46