[英]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.