使用java序列化对象

时间:2013-07-16 11:49:46

标签: java serialization fileoutputstream objectoutputstream

我正在尝试使用ObjectOutputStream和FileOutputStream序列化对象,但是会显示带有类名的错误。

JFileChooser fc = new JFileChooser();
 NewClientClass AddClient = new NewClientClass(IDNumber.getText(), FirstName.getText(), LastName.getText(), Address.getText(), DateOfBirth.getText(), Profession.getText());
       try {   
        int returnVal = fc.showSaveDialog(null);
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(fc.getSelectedFile().getAbsoluteFile()));
            out.writeObject(AddClient); //the application crashes.
            out.close();
            JOptionPane.showMessageDialog(null, "Successfully Saved");
        }

正如您所看到的,我正在声明一个新客户端并从文本框中获取数据。在检查tru调试时,数据存储正确,唯一的问题是将对象写入文件时。

请帮忙吗?

由于

1 个答案:

答案 0 :(得分:1)

如果没有进一步的细节,最可能的罪魁祸首是NewClientClass缺少Serializable接口的实现:

  

类的可序列化由实现该类的类启用   java.io.Serializable接口。没有实现此功能的类   接口不会将其任何状态序列化或反序列化。   可序列化类的所有子类型本身都是可序列化的。该   序列化接口没有方法或字段,仅用于   确定可序列化的语义。

编辑:

假设你有类似的东西:

public class NewClientClass
{
    public NewClientClass (String idNumber, String firstName, String lastName, String address, String dateOfBirth, String profession)
    {
         ...
    }

}

你只需要这样做:

public class NewClientClass implements Serializable
{
    public NewClientClass (String idNumber, String firstName, String lastName, String address, String dateOfBirth, String profession)
    {
         ...
    }
}

这应该是您需要做的所有事情(不要忘记导入包含该接口的包)。 Serializable界面将标记您的班级以进行血清化。

同样,你没有提到你得到的例外,所以这纯粹是推测性的。