JavaFX textarea显示大文件

时间:2017-09-01 05:19:25

标签: java performance javafx

我尝试使用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滑块的行为?

1 个答案:

答案 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);
}