簡體   English   中英

關於如何將大文件讀取到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中的每一行並將該行添加到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 您可以使用getDocumentJTextArea獲取它,或者您可以使用已經實現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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM