2010-04-30 3 views
3

Я хочу сохранить объект из моего класса в файле, а затем загрузить объект из этого файла. Но где-то я делаю ошибку (-ы) и не могу понять, где. Могу ли я получить некоторую помощь?Загрузка/сохранение объектов в файле на Java

public class GameManagerSystem implements GameManager, Serializable { 

    private static final long serialVersionUID = -5966618586666474164L; 
    HashMap<Game, GameStatus> games; 
    HashMap<Ticket, ArrayList<Object>> baggage; 
    HashSet<Ticket> bookedTickets; 
    Place place; 


    public GameManagerSystem(Place place) { 
     super(); 

     this.games = new HashMap<Game, GameStatus>(); 
     this.baggage = new HashMap<Ticket, ArrayList<Object>>(); 
     this.bookedTickets = new HashSet<Ticket>(); 
     this.place = place; 
    } 
    public static GameManager createManagerSystem(Game at) { 
     return new GameManagerSystem(at); 
    } 

    public boolean store(File f) { 
     try { 
      FileOutputStream fos = new FileOutputStream(f); 
      ObjectOutputStream oos = new ObjectOutputStream(fos); 
      oos.writeObject(games); 
      oos.writeObject(bookedTickets); 
      oos.writeObject(baggage); 
      oos.close(); 
      fos.close(); 
     } catch (IOException ex) { 
      return false; 
     } 
     return true; 
    } 
    public boolean load(File f) { 
     try { 
      FileInputStream fis = new FileInputStream(f); 
      ObjectInputStream ois = new ObjectInputStream(fis); 
      this.games = (HashMap<Game,GameStatus>)ois.readObject(); 
      this.bookedTickets = (HashSet<Ticket>)ois.readObject(); 
       this.baggage = (HashMap<Ticket,ArrayList<Object>>)ois.readObject(); 
      ois.close(); 
      fis.close(); 
     } catch (IOException e) { 
      return false; 
     } catch (ClassNotFoundException e) { 
      return false; 
     } 
     return true; 
    } 
. 
. 
. 
} 


public class JUnitDemo { 

    GameManager manager; 

    @Before 
    public void setUp() { 
     manager = GameManagerSystem.createManagerSystem(Place.ENG); 
    } 

    @Test 
    public void testStore() { 
     Game g = new Game(new Date(), Teams.LIONS, Teams.SHARKS); 
     manager.registerGame(g); 
     File file = new File("file.ser"); 
     assertTrue(airport.store(file)); 
    } 
} 
+1

Какая ошибка вы видите? –

+1

Мне любопытно. Поскольку весь объект сериализуем, почему вы не делаете oos.writeObject (это)? –

+0

Я получаю NotSerializableException :( –

ответ

5

Решение этой проблемы заключается в том, что при использовании других объектов, скажем класс A, в коллекцию, как HashMap и хотите сериализовать HashMap объект, затем implement интерфейс Serializable для класса A так:

class A implements Serializable { 
} 

... 
    HashMap<Integer,A> hmap; 
... 

В противном случае этот объект не будет сериализуемым.

Я надеюсь, что он разрешит эту проблему сейчас.

0

Попробуйте oos.flush() перед тем, как закрыть его.

+2

Все OutputStreams делают flush() перед закрытием() –

+0

... по крайней мере, те, которые хорошо реализованы, и это включает в себя то, что в JRE. –

0

Пожалуйста, помните, что весь объектный граф сохраняется во время сериализации. Если у вас есть некоторые ссылки на классы GUI, например, вы должны либо сделать их сериализуемыми, либо пометить их как «переходные», поэтому Java не будет их сериализовывать.

Смежные вопросы