Java 使用FileReader仅显示文本文件的最后一行?
我试图在GUI中创建的JTextArea中显示文本文件中的信息。我已经知道了如何将信息从文件中获取到JTextArea,但它只获取了文件的最后一行。我需要显示所有的行。我一直在改变循环,但没办法弄清楚这个。任何帮助都将不胜感激。下面是我的代码:Java 使用FileReader仅显示文本文件的最后一行?,java,line,jtextarea,text-files,filereader,Java,Line,Jtextarea,Text Files,Filereader,我试图在GUI中创建的JTextArea中显示文本文件中的信息。我已经知道了如何将信息从文件中获取到JTextArea,但它只获取了文件的最后一行。我需要显示所有的行。我一直在改变循环,但没办法弄清楚这个。任何帮助都将不胜感激。下面是我的代码: public TextArea() { initComponents(); try { FileReader one = new FileReader ("info.txt"); BufferedRea
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");
}
看看你的代码:
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);
我认为您正在重写line变量
line+=...
连接,然后设置循环外部连接的整行的值。最好使用StringBuilder连接所有行,并执行
textArea.setText(StringBuilder.toString())
从while
循环外部也是-内部while
循环是一个问题-您的条件是while(st.hasMoreTokens())
,然后您从标记器中逐个弹出特定的标记。但是你真正期望的是,这个循环在每个托卡尼装置上运行一次,所以if
会比while
好,但是,与我的注释相关-行。split(“,”)
将是获取代币的更好方式
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);