如何逐行将文件读取到JTextArea(GUI)中



我正在读取一个文件(这是一个姓名及其联系电话的列表),并将其显示在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()时,它会去掉所有结尾的行,无论是CR-LF、LF还是CR。上面的方法将按原样读取字符串。所以,也许一行一行地阅读它毕竟不是一个坏主意。但我刚刚检查过——JTextArea似乎可以处理CR LF。不过,这可能会引发其他问题。

通过逐行的方法,我会做一些类似的事情

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

这仍然会剥离EOL的最后一行。如果这很重要(例如,您希望能够将文本光标放在最后一行之后的行上),只需再执行一个+ "n"即可。

以上所有内容都需要Java 7/8。

如果你使用的是Java6或其他什么,那么你做这件事的方式可能还可以,除了:

  1. BufferedReader替换LineNumberReader——你不需要行号,是吗
  2. StringBuilder result = new StringBuilder()替换String result,用result.append(line).append('n')替换+=
  3. 最后,使用result.toString()来获取字符串

相关内容

  • 没有找到相关文章

最新更新