我有一个加载指定文件的textarea。一切正常,除了只有文件的最后一行输出到textarea。
File f = new File(this.path);
try {
// Create a Scanner for the file
Scanner input = new Scanner(f);
// Read text from the file
while (input.hasNext()) {
jTextArea1.setText(input.nextLine());
}
// Close the file
input.close();
} catch (FileNotFoundException fe) {
fe.printStackTrace();
}
答案 0 :(得分:3)
那是因为在你的while循环中你正在设置文本,而不是附加到它。
因此,每次获得新的输入行时,都会覆盖最后一行。你最终只剩下最后一行输入。
使用jTextArea1.append(input.nextLine());
代替jTextArea.setText(...);
。
答案 1 :(得分:1)
使用java.util.Scanner
中的分隔符,您可以读取整个文件,而不是逐行读取。
Scanner input = new Scanner(f);
input.useDelimiter("\\A");
if (input.hasNext()) {
jTextArea1.setText(input.next());
}
在useDelimiter("\\A")
{{1}}中查看详情。
答案 2 :(得分:0)
替换
jTextArea1.setText(input.nextLine());
使用
jTextArea1.append(input.nextLine());
setText()
使用参数替换textArea中的所有文本,append()
添加到textArea中的文本
答案 3 :(得分:0)
您可以使用StringBuilder将所有输入附加到一起,并使用setText将StringBuilder Varialbe的结果附加到最后
File f = new File(this.path);
StringBuilder sb = StringBuilder();
try( Scanner input = new Scanner(f)) {
// Read text from the file
while (input.hasNext()) {
sb.append(input.nextLine());
}
jTextArea1.setText(sb);
} catch (FileNotFoundException fe) {
fe.printStackTrace();
}
注意:您可以在java 7之后使用带有资源的try catch块,因此无需手动关闭扫描程序。
了解更多http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html
答案 4 :(得分:0)
虽然大多数其他答案在指出使用setText
而不是appendText
时是正确的,但事实是,JTextArea
有一种方便的方法来加载文字
JTextArea ta = new JTextArea();
try (BufferedReader br = new BufferedReader(new FileReader(new File("...")))) {
ta.read(br, null);
} catch (IOException exp) {
exp.printStackTrace();
}
这简化了整个过程...