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