Javafx Textarea显示大文件



我正在尝试使用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);
}

相关内容

最新更新