whats wrong?(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);
        }
    }
}

im 收到以下错误:线程"main"中的异常 java.lang.NumberFormat异常:空 at java.lang.Integer.parseInt(Integer.java:454( at java.lang.Integer.parseInt(Integer.java:527( at AccountInfo.restoreState(accounto.java:43( at accounto.main(accounto.java:60(

这是你的代码:

BufferedReader br=new BufferedReader(isr);
//...
age=Integer.parseInt(br.readLine());

这是BufferedReader.readLine()的文档(粗体我的(:

包含行内容的字符串,不包括任何行终止字符,如果已到达流的末尾,则null

事实上,你从来没有真正检查过是否达到了EOF。你能确定你的输入吗(事实证明你不能(。

也适用于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
}

从这一行:

Integer.parseInt(br.readLine());
因此,

看起来您正在阅读流的末尾,因此br.readLine()为空。而且您不能将 null 解析为 int。

br.readLine() 方法返回 null,无法将其转换为整数 - 可能的原因是已到达流的末尾。

1.我认为从br.readLine()返回的值为

2.因此,它不能从字符串转换为整数

3.这就是你得到NumberFormatException的原因

4. 要解决此问题,请将该代码包装到try/catch块中。

 try{
        age = Integer.parseInt(br.readLine());

  }catch(NumberFormatException ex){

        System.out.println("Error occured with during conversion");
 }

最新更新