我尝试使用JavaFX textarea
在屏幕上显示文本文件内容。我成功地使用小文件,但是对于大文件,一切都变得太慢了。大小为64KB
的文件在1秒内被读取,显示它需要2分钟。有代码:
try (FileReader fileReader = new FileReader(file); BufferedReader reader = new BufferedReader(fileReader)) {
char[] buf = new char[102400];
int haveRead;
while ((haveRead = reader.read(buf)) != -1) {
buf = Arrays.copyOf(buf, haveRead);
String str = new String(buf);
textArea.appendText(str);
log.trace(str);
}
} catch (IOException e) {
log.error("Error while reading file", e);
}
记录显示即使多线程几乎所有时间程序都在等待
textArea.appendText(STR);
怎么办?代码中是否有更快的实现或我的错误?或唯一的方法是做缓冲显示文本,以某种方式覆盖textarea滑块的行为?
答案 0 :(得分:3)
当您有超过数千行文字时,请不要使用TextArea
。
如果您只想显示文字,只需使用ListView<String>
:
但是如果你需要编辑文本,你必须建立自己的BigTextArea或者寻找一个好的库。例如RichTextFx:
StyleClassedTextArea bigTextArea = new StyleClassedTextArea();
try (FileReader fileReader = new FileReader(file);
BufferedReader reader = new BufferedReader(fileReader)) {
StringBuilder sb = new StringBuilder();
while ((haveRead = reader.read(buf)) != -1) {
sb.append(buf);
}
bigTextArea.appendText(sb.toString());
} catch (IOException e) {
log.error("Error while reading file", e);
}