关于如何将大文件读取到 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
视图组件数据的模型。您可以使用 getDocument
从 JTextArea
获取它,或者您可以使用已经实现 Document
的 类 之一:AbstractDocument、DefaultStyledDocument、HTMLDocument、PlainDocument。然后将您选择的 Document
添加到 JTextArea
和 setDocument
。
您可以使用 insertString(int offset, String str, AttributeSet a)
向 Document
添加内容。它还支持多个侦听器,您可以考虑使用 render(Runnable r)
为文档设置样式。
I want to read large file like 10-15k lines to jtextarea
使用JTextArea
class的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(...);
同样,您可以使用上面的代码获取线的偏移量。
我想将 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
视图组件数据的模型。您可以使用 getDocument
从 JTextArea
获取它,或者您可以使用已经实现 Document
的 类 之一:AbstractDocument、DefaultStyledDocument、HTMLDocument、PlainDocument。然后将您选择的 Document
添加到 JTextArea
和 setDocument
。
您可以使用 insertString(int offset, String str, AttributeSet a)
向 Document
添加内容。它还支持多个侦听器,您可以考虑使用 render(Runnable r)
为文档设置样式。
I want to read large file like 10-15k lines to jtextarea
使用JTextArea
class的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(...);
同样,您可以使用上面的代码获取线的偏移量。