[英]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中的每一行並將該行添加到List並突出顯示,我覺得效率不高。 你有什么建議我的?
我想讀10-15k行的大文件到jtextarea
使用JTextArea
類的read(...)
方法將整個文件直接讀入文本區域。
我還必須將每行添加到List
為什么你需要兩份文本? 如果您需要一行數據,可以從文本區域獲取文本:
int start = textArea.getLineStartOffset(...);
int end = textArea.getLineEndOffset(...);
String text = textArea.getDocument().getText(...);
突出一些具體的路線
使用熒光筆在加載到文本區域后突出顯示這些線條。
Highlighter highlighter = textArea.getHighlighter();
highlighter.addHighlight(...);
您可以再次使用上面的代碼獲取線的偏移量。
使用“ 文檔”界面。 它是保存視圖組件數據的模型,它是JTextArea
。 您可以使用getDocument
從JTextArea
獲取它,或者您可以使用已經實現Document
的類之一:AbstractDocument,DefaultStyledDocument,HTMLDocument,PlainDocument。 然后使用setDocument
將您選擇的Document
添加到JTextArea
。
您可以使用insertString(int offset, String str, AttributeSet a)
向Document
添加內容。 它還支持多個偵聽器,您可以考慮使用render(Runnable r)
來為文檔設置樣式。
我沒有嘗試過,但我建議將所有文件內容放入一個String中,然后使用setText(String text)方法一次性設置JTextArea的文本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.