【问题标题】:suggestion on how to read a large file to jtextarea关于如何将大文件读取到 jtextarea 的建议
【发布时间】:2015-08-01 12:31:28
【问题描述】:

我想将 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并且还突出显示,我认为这不是很有效。你有什么建议?

【问题讨论】:

    标签: java swing file jtextarea


    【解决方案1】:

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

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

    我还必须将每一行添加到列表中

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

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

    突出一些特定的行

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我会在明天测试你的想法。谢谢你的建议。
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多