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

4

4 に答える 4

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
}
于 2012-07-22T13:35:56.190 に答える
3

この行から:

Integer.parseInt(br.readLine());

したがって、ストリームの終わりを読んでいるように見えるので、br.readLine()nullです。また、nullをintに解析することはできません。

于 2012-07-22T13:35:23.973 に答える
3

br.readLine()メソッドはnullを返しますが、これは整数に変換できません。これは、ストリームの終わりに達したことが原因である可能性があります。

于 2012-07-22T13:35:35.880 に答える
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");
 }
于 2012-07-22T14:06:08.030 に答える