簡體   English   中英

如何從文件逐行讀取到JTextArea(GUI)?

[英]How to read from a file into a JTextArea (GUI) line by line?

我正在從一個文件(這是名稱及其聯系方式的列表)中讀取內容,並將其顯示在GUI的文本區域中。 文件讀取良好,並顯示文本。 但是我希望文件中的每一行都在GUI的新行中。 因此,每個名稱和地址都要換行。 我該怎么做呢? 到目前為止,這是我的代碼,但是不會在GUI的新行上顯示文件的每一行。

public void books() throws IOException {
        String result = " ";
        String line;
        LineNumberReader lnr = new LineNumberReader(new FileReader(newFile("books2.txt")));
        while ((line = lnr.readLine()) != null) {
            result += line;`
        }


        area1 = new JTextArea(" label 1 ");
        area1.setText(result);
        area1.setBounds(50, 50, 900, 300);
        area1.setForeground(Color.black);
        panelMain.add(area1);

    }

您實際上不需要逐行閱讀它。 這樣的事情會做:

String result = new String(Files.readAllBytes(Paths.get("books2.txt")),
                           StandardCharsets.UTF_8);

當然,這將需要更多的內存:首先讀取字節,然后創建字符串。 但是,如果需要考慮內存問題,那么立即讀取整個文件可能是個壞主意,更不用說在JTextArea顯示它了!

它可能無法正確處理其他行尾。 當您使用readLine() ,它將readLine()所有結尾的行,無論是CR LF,LF還是CR。 上面的方法將按原樣讀取字符串。 因此,也許逐行閱讀它並不是一個壞主意。 但我只是checked- JTextArea似乎處理CR LF所有權利。 但是,這可能會導致其他問題。

使用逐行方法,我會做類似的事情

String result = String.join("\n",
        Files.readAllLines(Paths.get("books2.txt"),
            StandardCharsets.UTF_8));

這仍然會剝離EOL的最后一行。 如果那很重要(例如,您希望能夠將文本光標放在最后一個之后的行上),則再做一個+ "\\n"

以上所有要求Java 7/8。

如果您使用的是Java 6或類似的東西,那么您的方式可能還可以,除了:

  1. BufferedReader替換LineNumberReader您不需要行號,對嗎?
  2. String result替換為StringBuilder result = new StringBuilder() ,將+=替換為result.append(line).append('\\n')
  3. 最后,使用result.toString()獲取字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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