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