什么错了?(NumberFormatException:null)

时间:2012-07-22 13:32:26

标签: java numberformatexception

    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)

4 个答案:

答案 0 :(得分:8)

这是你的代码:

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
}

答案 1 :(得分:3)

从这一行:

Integer.parseInt(br.readLine());

所以看起来你正在读取流的末尾,所以br.readLine()为空。并且您无法将null解析为int。

答案 2 :(得分:3)

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

答案 3 :(得分:0)

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

2。因此无法从字符串转换为整数

3。这就是你得到NumberFormatException

的原因

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

 try{

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


  }catch(NumberFormatException ex){


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