JavaFX textarea显示大文件

我正在尝试使用JavaFX textarea在屏幕上显示文本文件内容.我成功地使用小文件完成了操作,但是对于大文件,一切都变得太慢了. 1秒内读取了大小为64KB的文件,显示该文件需要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滑块的行为?

最佳答案
当您有一千多行文本时,请勿使用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);
}

转载注明原文:JavaFX textarea显示大文件 - 代码日志