什么错(NumberFormatException异常:空)?(whats wrong?(Numbe

2019-07-30 12:54发布

    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:空在java.lang.Integer.parseInt(Integer.java:454)在java.lang.Integer.parseInt(Integer.java:527)在AccountInfo.restoreState(accounto.java:43)在accounto.main(accounto.java:60)

Answer 1:

这是你的代码:

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
}


Answer 2:

从这一行:

Integer.parseInt(br.readLine());

因此,它看起来就像你正在阅读的数据流的末尾,以便br.readLine()为空。 而且你不能解析空成一个int。



Answer 3:

所述br.readLine()方法返回null,这是不能被转换成整数-此的可能的原因是该流的结尾已经到达。



Answer 4:

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");
 }


文章来源: whats wrong?(NumberFormatException: null)