文件的Writeobject在java中不起作用
我想将一个对象(游戏模型)消毒到文件中,然后从该文件中反序列化该对象 我有一个UIFClass,它有一个获取返回字符串的文件名的方法。 对于序列化部分,我还有两个类:GameSerializerClass和GameDeserializerClass。它们都是Actionlistener的子类 以下是实施部分所需的内容:文件的Writeobject在java中不起作用,java,file,design-patterns,serialization,snapshot,Java,File,Design Patterns,Serialization,Snapshot,我想将一个对象(游戏模型)消毒到文件中,然后从该文件中反序列化该对象 我有一个UIFClass,它有一个获取返回字符串的文件名的方法。 对于序列化部分,我还有两个类:GameSerializerClass和GameDeserializerClass。它们都是Actionlistener的子类 以下是实施部分所需的内容: 从UIFClass通过JFileChooser获取用户选择的文件 在UIFClass中使用GameSerializerClass,UIFClass是actionlistener
- 从UIFClass通过JFileChooser获取用户选择的文件
- 在UIFClass中使用GameSerializerClass,UIFClass是actionlistener 将GameModel对象序列化(保存)到用户指定的文件中
- 使用GameDeserializerClass,它也是一个actionlistener 从用户指定的文件反序列化(readobject)
public class 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) {
}
}
配子类
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);
}
}
}
我附上了UML图。我正在尝试使用快照模式
你能帮帮我吗?
非常感谢。
Hind为什么writetofile会打开一个输出流(似乎完全没有使用)?此外,在您的actionPerformed中,您应该在完成写入后关闭流。您好,jtahborn,我在writetofile中删除了输出流,我尝试在actionPerformed中关闭流,但它仍然没有写入文件,我还尝试在writeObject(ObjectOutputStream obos)中关闭流,但仍然没有写入文件。我还试图打印对象,它给了我指针,但它没有将其写入文件。顺便说一句,序列化为Java本机格式不一定是唯一的选择。您可以选择使用googlegson()之类的库序列化为JSON