什么问题?(NumberFormatException: null)
什么问题?(NumberFormatException: null)
import java.io.*; class AccountInfo { private String lastName; private String firstName; private int age; private float accountBalance; protected AccountInfo(final String last,final String first,final int ag,final float balance) throws IOException{ lastName=last; firstName=first; age=ag; accountBalance=balance; } public void saveState(final OutputStream stream){try{ OutputStreamWriter osw=new OutputStreamWriter(stream); BufferedWriter bw=new BufferedWriter(osw); bw.write(lastName); bw.newLine(); bw.write(firstName); bw.write(age); bw.write(Float.toString(accountBalance)); bw.close();} catch(IOException e){ System.out.println (e); } } public void restoreState(final InputStream stream)throws IOException{ try{ InputStreamReader isr=new InputStreamReader(stream); BufferedReader br=new BufferedReader(isr); lastName=br.readLine(); firstName=br.readLine(); age=Integer.parseInt(br.readLine()); accountBalance=Float.parseFloat(br.readLine()); br.close();} catch(IOException e){ System.out.println (e); } } } class accounto{ public static void main (String[] args) {try{ AccountInfo obj=new AccountInfo("chaturvedi","aayush",18,18); FileInputStream fis=new FileInputStream("Account.txt"); FileOutputStream fos=new FileOutputStream("Account,txt"); obj.saveState(fos); obj.restoreState(fis);} catch(IOException e){ System.out.println (e); } } }
我收到以下错误:异常线程\"main\"java.lang.NumberFormatException:null
在java.lang.Integer.parseInt(Integer.java:454)
在java.lang.Integer.parseInt(Integer.java:527)
在AccountInfo.restoreState(accounto.java:43)
在accounto.main(accounto.java:60)
admin 更改状态以发布 2023年5月22日
这是您的代码:
BufferedReader br=new BufferedReader(isr); //... age=Integer.parseInt(br.readLine());
下面是BufferedReader.readLine()
的文档(加粗是我加的):
一个字符串,其中包含行的内容,不包括任何行终止字符,或者如果到达流的结尾,则为
null
事实上,您从未真正检查过是否已经达到了EOF(end of file)。您对输入流有这么大把握吗(结果证明您不能有这么大把握)。
对于Integer.parseInt()
也是一样:
抛出:
NumberFormatException
- 如果字符串不包含可解析的整数。
null
几乎不是“可解析的整数”。最简单的解决方案是检查您的输入并以某种方式处理错误:
String ageStr = br.readLine(); if(ageStr != null) { age = Integer.parseInt(br.readLine()) } else { //decide what to do when end of file }