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

时间:2015-08-01 12:31:28

标签: java swing file 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中的每一行并将该行添加到List并且还强调,我认为效率不高。你有什么建议我?

3 个答案:

答案 0 :(得分:4)

  

我想读取10-15k行的大文件到jtextarea

使用Button(Light l): ledLight(l) { } 类的read(...)方法将整个文件直接读入文本区域。

  

我还必须将每行添加到List

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

JTextArea
  

突出显示一些特定的行

使用荧光笔在加载到文本区域后突出显示这些行。

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

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

答案 1 :(得分:1)

使用Document界面。它是保存视图组件数据fileTypesAllowed的模型。您可以使用JTextAreaJTextArea获取它,也可以使用已实现getDocument的其中一个类:AbstractDocument,DefaultStyledDocument,HTMLDocument,PlainDocument。然后将您的Document选项添加到Document JTextArea

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

答案 2 :(得分:0)

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