序列化对象到文件

时间:2015-05-09 19:54:30

标签: java serialization outputstream snapshot

我想将一个对象(GameModel)序列化为file,然后从该文件反序列化该对象。

我有一个UIFClass,它有一个方法来获取一个返回字符串的文件名。我还有序列化部分的两个类,GameSerializerClass和GameDeserializerClass。它们都是Actionlistener的子类

以下是实施部分所需的内容:

从UIFClass通过JFileChooser获取用户选择的文件 在UIFClass中使用GameSerializerClass,它是将GameModel对象序列化(保存)到用户指定文件中的actionlistener。 使用GameDeserializerClass,它也是一个actionlistener,用于从用户指定的文件反序列化(readobject)。 我创建了一个GameModel对象,我在UIFClass中有一个引用。顺便说一下,UIFClass正在创建GameSerializerClass对象,构造函数具有(GameModel)对象和UIFClass(this)。它还创建了GameDeserializerClass对象,构造函数具有UIFClass(this)。

我有一个方法可以将JFileChooser的actionlistener设置为GameSerializerClass和GameDeserializerClass。

actionPerformed中的

我正在从字符串创建一个文件对象,然后将其传递给新的ObjectInputStream,然后将ObjectInputStream传递给writeObject(ObjectOutputStream out)。在该方法中使用out.writeObject(GameModel)。

它不写入文件,我不知道为什么!

以下是代码:

公共类GameUserInterface {

public GameSerializer gmserilizer;
public GameDeserializer gmdeserilizer;
public GameModel gmMdl;
public JFileChooser jfc = new  JFileChooser();
private String saveFileName;
static JFileChooser fc;
FileOutputStream fos ;
FileInputStream fis ;

public String getsaveFileName()
{
    jfc.setFileSelectionMode(fc.FILES_ONLY);
    jfc.showOpenDialog(null);
    File myfile = jfc.getSelectedFile();
    saveFileName = myfile.getAbsolutePath();
    System.out.println("the file name is " + saveFileName); 
    return saveFileName; 
}

void writeTofile()
{
    getMilestoneMementoManager();

    try {

        jfc.addActionListener(new GameSerializer(this, this.gmMdl));
        fos = new FileOutputStream(getsaveFileName());
        } catch (IOException ex) {
}

}

GameSerializerClass

public class GameSerializer implements ActionListener {

    private GameUserInterface ui;
    private GameModel model;

    GameSerializer(GameUserInterface ui , GameModel model)
    {
        this.ui = ui;
        this.model = model;
    }

    private void writeObject(ObjectOutputStream obos) throws IOException
    {
        try {
obos.writeObject(model);
           System.out.println("I reached to that point " + model.toString() );
        } catch (IOException ex) {
            Logger.getLogger(GameSerializer.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    @Override
    public void actionPerformed(ActionEvent e) {        
        try {
            System.out.println("I am at actionPerformed in GameSerializer class !");
            File myFile = new File(ui.getsaveFileName());
            ObjectOutputStream obos = new ObjectOutputStream(new FileOutputStream(myFile));
            writeObject(obos);
        } catch (IOException ex) {
            Logger.getLogger(GameDeserializer.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

enter image description here

我附上了UML图。我正在尝试使用快照模式。

请帮帮我谢谢。

0 个答案:

没有答案