我想读取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并且还强调,我认为效率不高。你有什么建议我?
答案 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
的模型。您可以使用JTextArea
从JTextArea
获取它,也可以使用已实现getDocument
的其中一个类:AbstractDocument,DefaultStyledDocument,HTMLDocument,PlainDocument。然后将您的Document
选项添加到Document
JTextArea
。
您可以使用setDocument
向insertString(int offset, String str, AttributeSet a)
添加内容。它还支持多个侦听器,您可以考虑使用Document
为文档设置样式。
答案 2 :(得分:0)
我还没有尝试过,但我建议将所有文件内容放入String中,然后使用setText(String text)方法一次性设置JTextArea的文本。