Java, сохраненный файл в объекте, не может получить его
Это был мой первый раз, когда я пытался сохранить объект в файл, поэтому я понятия не имею, где я иду не так. Это всего лишь тестовая программа, оригинальная намного больше. Сохранение выполнено успешно, файл резервной копии создан. Однако я не могу вспомнить этот файл / объект. Компиляция работает, хотя. Может кто-нибудь объяснить, пожалуйста, где именно я пошел не так. И в немного более стиле для начинающих, пожалуйста, мне действительно плохо с "Serializable"
import java.io.*;
import java.util.*;
class save {
public static void main(String[] args) {
HashMap<String, Person> list = new HashMap<String, Person>();
Person person = new Person("12", "AAA", "XXX");
list.put(person.getID(), person);
if( list.containsKey(person.getID()))
System.out.println(list.get(person.getID()));
savePerson(person);
list.remove(person.getID());
if( list.containsKey(person.getID()))
System.out.println(list.get(person.getID()));
else
System.out.println("Person is not available");
person = loadPerson("12");
System.out.println(list.size());
}
protected static void savePerson(Person person) {
File source = new File("person"+person.getID()+".data");
try { source.createNewFile(); } catch(IOException e) {System.out.println("Can't create new file : " +e.getMessage());}
try {
FileOutputStream personFile = new FileOutputStream("person"+person.getID()+".data");
try {
ObjectOutputStream personObj = new ObjectOutputStream (personFile);
personObj.writeObject(person);
personObj.close();
personFile.close();
} catch(IOException e){System.out.println("Can't save the object :" +e.getMessage());}
} catch(FileNotFoundException e){System.out.println("Can't read the damn file :" +e.getMessage());}
}
protected static Person loadPerson(String ID) {
Person person = null;
try {
FileInputStream personFile = new FileInputStream("person"+ID+".data");
try {
ObjectInputStream personObj = new ObjectInputStream(personFile);
try {
person = (Person)personObj.readObject();
personObj.close();
personFile.close();
} catch(ClassNotFoundException e){System.out.println("Can't find the class :" +e.getMessage());}
} catch(IOException e){System.out.println("Can't save the object :" +e.getMessage());}
} catch(FileNotFoundException e){System.out.println("Can't read the damn file :" +e.getMessage());}
return person;
}
}
РЕДАКТИРОВАТЬ: Вот человек класса по запросу:
import java.io.*;
class Person implements Serializable {
private String id;
private String fname;
private String lname;
public Person(String id, String fname, String lname) {
this.id = id;
this.fname = fname;
this.lname = lname;
}
protected String getID() { return id; }
protected String getFname() { return fname; }
protected String getLname() { return lname; }
protected void setFname(String newFname) { fname = newFname; }
public String toString() {
return id + ", " + fname + " " + lname;
}
}
1 ответ
Закройте файл после записи в него. Вы, вероятно, не получите доступ к файлу. Кроме того, если вы заполните пустые блоки catch печатью исключения, вы будете ближе к проблеме.
Вы можете закрыть его, позвонив personFile.close()
(и то же самое после прочтения объекта)
РЕДАКТИРОВАТЬ: Я проверил ваш (новый) код, и он работает просто отлично. Я смог прочитать объект, но ваш код ничего не делает с ним.
Кстати, вам не нужно закрывать оба потока, как указано в close
:
Если у этого потока есть связанный канал, то канал также закрыт.