我正在尝试编写一个程序,用户可以在其中:1) 将一个人添加到联系人(姓名、电话、电子邮件),2) 从联系人中删除一个人,3) 从联系人中读取所有内容。
我这样做的方式是要求用户做出选择并分别做任何事情。对于写入,我只是将一个对象写入文件。对于删除,我想我会要求用户输入“姓氏”,它将用作 KEY(因为我使用的是 TreeMap)并将删除键的值(对象)。
所以我在阅读这里时遇到了问题。我正在尝试像这样读取对象:
public void readContact()
{
TreeMap<String, Contact> contactMap = new TreeMap<String, Contact>();
try
{
ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(
new FileInputStream(file)));
while( in.available() > 0 ) //This line does NOT read
{
Contact c = (Contact)in.readObject();
contactMap.put(c.getLastName(), c);
}
for(Map.Entry contact : contactMap.entrySet() )
{
Contact con = contactMap.get( contact.getKey() );
System.out.println( con.getLastName() + ", " + con.getFirstName() + ": " + con.getPhoneNumber() + "\t" + con.getEmail());
}
}
catch(Exception e)
{
System.out.println("Exception caught");
}
}
在我得到 EOFException
之前,请不要建议做类似 while(true)
的事情,因为:
- 我相信这不是异常处理的目的
- 在此之后我还有更多的事情要做,所以我不能让程序终止'
最佳答案
Please do not suggest doing something like while(true) until I get the EOFException
这正是我的建议。当您搜索答案时,根据这样的任意标准来限定解决方案空间会适得其反。
because:
that isn't what exception handling is for I believe
当您调用的 API 抛出异常时,就像这个异常一样,您别无选择,只能捕获它。无论您怎么想“异常处理的目的是什么”,您都受制于 API 设计者在设计 API 时的想法。
I still have more things to do after this so I can't have the program terminating'
所以不要终止它。捕获 EOFException,
关闭输入,并跳出循环。
我见过浪费在“异常处理的用途”上的编程时间比我想象的还要多。
关于java - 在java中读取对象直到文件结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14095713/