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

Java 关于如何将大文件读取到jtextarea的建议,java,swing,file,jtextarea,Java,Swing,File,Jtextarea,我想把10-15k行这样的大文件读到jtextarea。 除此之外,我还必须将每一行添加到列表中,并突出显示jtextarea中的一些特定行 我现在尝试的是,将文件传递到FileReader,再传递到BufferedReader。在SwingWorker内部,在doBackground方法中,我调用: while ((line = br.readLine()) != null) { textArea.append(line); textArea.append(Syste

我想把10-15k行这样的大文件读到jtextarea。 除此之外,我还必须将每一行添加到列表中,并突出显示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的文本。

使用该接口。保存视图组件数据的模型是
JTextArea
。您可以使用
getDocument
JTextArea
获取它,也可以使用已经实现
Document
的类之一:AbstractDocument、DefaultStyledDocument、HTMLDocument、PlainDocument。然后使用
setDocument
将您选择的
文档添加到
JTextArea

您可以使用
insertString(int offset,String str,AttributeSet a)
文档添加内容。它还支持多个侦听器,您可以考虑使用“<代码>渲染(Runnabr R)< /Cord>”来对文档进行样式化。
我想把像10-15k行这样的大文件读到jtextarea

使用
JTextArea
类的
read(…)
方法将整个文件直接读取到文本区域中

Highlighter highlighter = textArea.getHighlighter();
highlighter.addHighlight(...);
我还必须将每一行添加到列表中

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

int start = textArea.getLineStartOffset(...);
int end = textArea.getLineEndOffset(...);
String text = textArea.getDocument().getText(...);
突出显示某些特定行

将行加载到文本区域后,使用荧光灯高亮显示行

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

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

我将在tommorow测试您的想法。谢谢你的建议。