我有一个简单的程序,我可以从文本文件中读取内容。文本文件包含数字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
。
问题是,为什么 line
变量为 null ?它是在 while 循环
中初始化的,那么它怎么会在方法结束时为 null 呢?
PS. 从文件中正确读取数字,如果我将 writeFile(line);
移动到 readFile 的
方法,它不会抛出任何异常,并且我的程序按预期工作。while 循环
内
最佳答案
有几件事。对 writeFile()
的调用应该位于 try block 内,因为如果读取失败,则运行它是没有意义的。
你的错误也是因为
while((line = br.readLine()) != null) {
roomNumberField.setText(line);
}
此循环运行直到line == null
。因此,退出后(调用 writeFile()
之前),该值将为 null
。
要么你想写每一行,然后 writeFile
应该在循环中,或者你需要找出你想要的行并保存它。
关于java - 将从文本文件读取的字符串解析为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48050623/