我有一个简单的程序,我从文本文件中读取。文本文件包含数字99
。我使用名为readFile
的方法读取了这个数字。阅读之后,我再调用writeFile
方法,该方法将文本文件中读取的数字增加1
,然后再将其保存在文本文件中。
从文件中读取的方法
public void readFile() {
String line = "";
try(FileReader fr = new FileReader("Room Number.txt");
BufferedReader br = new BufferedReader(fr)) {
while((line = br.readLine()) != null) {
roomNumberField.setText(line);
}
} catch (IOException ex) {
ex.printStackTrace();
}
writeFile(line);
}
问题
正如您在上述方法中所看到的,我正在String
变量line
中读取文件中的数据,在方法结束时,我调用writeFile
方法并通过此方法中的line
变量。在writeFile
方法中,在我将line
变量增加1
之前,我必须将其解析为int
,但这样做会抛出NumberFormatException
。现在在我的情况下,只有在line
无法解析为int
时才会抛出此异常。起初我认为可能是因为line
变量包含任何space
,所以我在其上调用了trim
方法然后抛出NullPointerException
,这让我相信line
null
1}}是line
。
问题是,为什么while loop
变量为空?它在writeFile(line);
中初始化,那么在方法结束时它怎么能为空呢?
PS。正确地从文件中读取数字,如果我在while loop
方法的readFile
内移动parser
,则不会抛出任何异常,我的程序可以正常工作。
答案 0 :(得分:4)
一些事情。您对writeFile()
的调用应该在try块内,因为如果读取失败,则无法运行它。
您的错误也是因为
while((line = br.readLine()) != null) {
roomNumberField.setText(line);
}
此循环一直运行到line == null
。因此,在退出之后(在调用writeFile()
之前),该值将为null
。
要么你想写每一行,那么writeFile
应该在循环中,或者你需要弄清楚你想要哪一行并保存它。
答案 1 :(得分:2)
line
等于<{p>中的null
时,答案很简单
while((line = br.readLine()) != null) {
while循环中断,line
在循环外的这个位置有null
值。虽然循环内部line
总是有一些值,因为它在循环内部。)。