什么问题?(NumberFormatException: null)

9 浏览
0 Comments

什么问题?(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日
0
0 Comments

从这一行开始:

Integer.parseInt(br.readLine());

看起来像是你正在读取流的末尾,因此 br.readLine() 是 null。而你无法将 null 解析为整数。

0
0 Comments

这是您的代码:

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
}

0