Пытаюсь написать программу, в которой пользователь может: 1) Добавить человека в контакт (имя, телефон, email), 2) Удалить человека из контактов, 3) Читать все из контакта.
Как я это делаю, я прошу пользователя сделать свой выбор и, соответственно, делаю все, что угодно. Для записи я просто записываю объект в файл. Для удаления, я думаю, я попрошу у пользователя «фамилию», которая будет использоваться в качестве КЛЮЧА (поскольку я использую 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");
}
}
Пожалуйста, не предлагайте делать что-то вроде while(true)
, пока я не получу EOFException
, потому что:
- я считаю, что это не то, для чего нужна обработка исключений
- У меня еще много дел после этого, так что я не могу завершить программу.
.get()
на карте, чтобы получить значение? - person fge   schedule 31.12.2012try
весь ваш важный код. Просто используйте блокtry
вокруг кода, который может дать сбой, перехватите исключение и предоставьте альтернативу. Вы также можете вызвать исключение и обработать его в вызывающем коде. - person Modus Tollens   schedule 31.12.2012for(Contact con: contactMap.values())
- person Peter Lawrey   schedule 31.12.2012in.available()
строго не делает того, что вы ожидаете.available()
возвращает количество байтов, доступных для чтения без блокировки, но это не означает (строго говоря), что это размер данных или что там больше нет данных. - person Greg Kopff   schedule 31.12.2012Please do not suggest doing something like while(true) until I get the EOFException because: 1) that isn't what exception handling is for I believe
- вы задаете здесь вопрос не для того, чтобы доверить более знающим людям? - person Greg Kopff   schedule 31.12.2012return;
в блокcatch(EOFException exception)
? На самом деле, почему бы не попробовать вызвать еще один код после того метода, который вы предоставили? Если это не удается (чего не должно быть!), почему бы не опубликовать скриншот (или ссылку на него), показывающий нам, что это произошло именно так, как вы опасались? - person Mike Warren   schedule 06.08.2013