繁体   English   中英

输入流阅读器,带有多行文本文件

[英]Input Stream Reader with multi-line text file

我的程序无法读取多行格式的txt文件。 文本文件的内容应打印在textArea内,但涉及多行文件时则什么也没有发生。 我也想提示一条消息:文件存在时为“ File Existed”,文件不存在时为“ File not found”。

这是我的代码:

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();
                }
            }

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();
}

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

textArea.append(sCurrentLine + System.getProperty("line.separator"));
public void setText(String t)

将此TextComponent的文本设置为指定的文本。 如果文本为null或为空,则可以简单地删除旧文本。

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

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

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

...set whole text...
textArea.setText(sb.toString());
while ((sCurrentLine = br.readLine()) != null) {
    textArea.setText(sCurrentLine);
}

每次都会覆盖现有值,因此最终只剩下最后一行的值。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM