关于如何将大文件读取到 jtextarea 的建议

suggestion on how to read a large file to jtextarea

我想将 10-15k 行的大文件读取到 jtextarea。 除此之外,我还必须将每一行添加到 List 并突出显示 jtextarea 中的一些特定行。

我现在尝试的是,我将文件传递到 FileReader 到 BufferedReader。在我的 SwingWorker 中,在我调用的 doBackground 方法中:

 while ((line = br.readLine()) != null) {
      textArea.append(line);
      textArea.append(System.getProperty("line.separator"));
      list.add(line);
      highlightLine(lineNumber);
 }

当我 运行 程序并选择文件并打开读取进程时,它会立即加载多达 700 行,然后程序变慢并每秒加载 10 行。

我的另一个想法是,使用 JTextComponent 读取方法读取整个文件(这似乎 setText 更快,然后追加每一行),然后再次读取整个文件或遍历 jtextarea 中的每一行并添加该行列出并突出显示,我认为这不是很有效。你有什么建议吗?

我没试过,但我建议将所有文件内容放入一个字符串中,然后使用 setText(String text) 方法一次性设置 JTextArea 的文本。

使用Document界面。它是保存 JTextArea 视图组件数据的模型。您可以使用 getDocumentJTextArea 获取它,或者您可以使用已经实现 Document 的 类 之一:AbstractDocument、DefaultStyledDocument、HTMLDocument、PlainDocument。然后将您选择的 Document 添加到 JTextAreasetDocument

您可以使用 insertString(int offset, String str, AttributeSet a)Document 添加内容。它还支持多个侦听器,您可以考虑使用 render(Runnable r) 为文档设置样式。

I want to read large file like 10-15k lines to jtextarea

使用JTextAreaclass的read(...)方法直接将整个文件读入文本区

I also have to add every line to List

为什么需要两份课文?如果您需要一行数据,您可以从文本区域获取文本:

int start = textArea.getLineStartOffset(...);
int end = textArea.getLineEndOffset(...);
String text = textArea.getDocument().getText(...);

to highlight some specific lines

将行加载到文本区域后,使用荧光笔突出显示行。

Highlighter highlighter = textArea.getHighlighter();
highlighter.addHighlight(...);

同样,您可以使用上面的代码获取线的偏移量。