具有多行文本文件的输入流阅读器

时间:2015-08-18 13:17:40

标签: java eclipse swing file-io jtextarea

我的程序无法读取多行格式的txt文件。文本文件的内容应该打印在textArea中,但是当涉及到多行文件时,没有任何反应。另外我想提示一条消息:"文件存在"当文件存在时,"找不到文件"当文件不存在时。

这是我的代码:

BufferedReader br = null;
try {
    String sCurrentLine;

    br = new BufferedReader(new FileReader("C:\\Users\\theBeard\\workspace\\LeapYear\\"+textField.getText()));

    while ((sCurrentLine = br.readLine()) != null) {
        textArea.setText(sCurrentLine);
    }
        br.close();
} catch (IOException ex) {
    ex.printStackTrace();
} finally {
    try {
        if (br != null)br.close();
    } catch (IOException ex) {
        ex.printStackTrace();
    }
}

此外,此方法是否正确,以检查文件是否存在?

try {

                String sCurrentLine;

                br = new BufferedReader(new FileReader("C:\\Users\\theBeard\\workspace\\LeapYear\\"+textField.getText()));
                textArea.read(br, textArea);//this was a suggestion     by     someone below


                while ((sCurrentLine = br.readLine()) != null) {



                     textArea.append(sCurrentLine);
                     textArea.append(System.lineSeparator());
                }

            } catch (IOException ex) {
                ex.printStackTrace();
            } finally {
                try {
                    if (br != null)
                    {

                        br.close();
                    }
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }

5 个答案:

答案 0 :(得分:3)

textArea.setText(sCurrentLine);不会文本添加到区域,但会用新文本替换。因此,您的代码会将文本设置为文本文件的最后一行。所以如果你的最后一行是空的,你将看不到任何东西。

您可能想要使用的是append方法。

此外,您没有在正确的位置关闭资源,因为它应该只在finally块中完成。考虑使用try-with-resources来为您处理它。

所以试试像

这样的东西
try (BufferedReader br = new BufferedReader(
        new FileReader("C:\\Users\\theBeard\\workspace\\LeapYear\\"+ textField.getText()))) {
    String sCurrentLine;
    while ((sCurrentLine = br.readLine()) != null) {
        textArea.append(sCurrentLine);
        textArea.append(System.lineSeparator());
    }
} catch (IOException ex) {
    ex.printStackTrace();
}

答案 1 :(得分:3)

附加文本而不是为每次迭代设置它

drawImage

答案 2 :(得分:1)

public void setText(String t)
  

将此TextComponent的文本设置为指定的文本。如果是文字   为null或为空,具有简单删除旧文本的效果。

textArea.setText(sCurrentLine)会覆盖每行的文本区域的整个文本。如果文件中的最后一行是emtpy行,则文本区域将为空。

答案 3 :(得分:0)

好吧,如果你的最后一行是空的,那么唯一要设置的是这条空行,因为你总是会覆盖文本区域中的文本。我建议使用StringBuilder将整个文件读入...

StringBuilder sb = new StringBuilder();
... read via BufferedReader
sb.append( sCurrentLine );

...set whole text...
textArea.setText(sb.toString());

答案 4 :(得分:0)

while ((sCurrentLine = br.readLine()) != null) {
    textArea.setText(sCurrentLine);
}

每次都会覆盖现有值,因此最终只能得到最后一行值。

获取先前的值,然后附加到它。

while ((sCurrentLine = br.readLine()) != null) {
    String x = textArea.getText().toString();
    textArea.setText(x + sCurrentLine);
}