我的程序无法读取多行格式的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();
}
}
答案 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);
}