我正在尝试使用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
。
如果您只想显示文本,只需使用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);
}