我正在为小型企业创建一个程序。该程序旨在具有较小的模块,这些模块在开发时将被附加到程序的其余部分。它包含“Article”和“Category”类,它包含在“ArticleDatabase”类的列表中。 该类被序列化并保存到硬盘驱动器的文件中。 Register模块已完成,“Receipt”类同样包含在“RegisterDatabase”类的列表中,该类被序列化并保存到单独的文件中。 系统设置以相同的方式保存。
但是,现在我正在设计一个Invoice模块,并发现我需要在“Article”类和System数据中添加一个字段。
现在正在使用寄存器,并且包含需要保存的实际数据,因此我不能只更改类,因为这在我加载时会产生InvalidClassException。
由于我知道这将是未来的常见问题,我需要一些关于如何解决这个问题的建议。
我如何设置一个系统,我可以从类中保存文件,并将数据加载到此类的更新版本或新版本中,还是应该以全新的方式处理?
我已经尝试将旧文件中的数据加载到具有所需字段的重复类中,但是重新配置程序以使用新文件是一项非常麻烦的任务,如果我必须每次都这样做,再次,浪费了很多时间。
用于保存加载的方法如下:
public void saveArticleDB() throws IOException {
// Write to disk with FileOutputStream
FileOutputStream f_out = new FileOutputStream("articles.data");
// Write object with ObjectOutputStream
ObjectOutputStream obj_out = new ObjectOutputStream(f_out);
obj_out.writeObject(MyMain.articleDB);
}
public ArticleDB loadArticleDB() throws IOException {
try {
FileInputStream f_in = new FileInputStream("articles.data");
ObjectInputStream obj_in = new ObjectInputStream(f_in);
Object obj = obj_in.readObject();
if (obj instanceof ArticleDB) {
return (ArticleDB) obj;
} else return null;
} catch (FileNotFoundException e) {
new MessageDialog("Article DB - File not found");
return null;
} catch (InvalidClassException e) {
new MessageDialog("Article DB - Class didnt match");
return null;
} catch (ClassNotFoundException e) {
new MessageDialog("Article DB - Class not found");
return null;
}
}
将数据传递到保存文件的类,实现Serializable,这是用于保存和加载类的唯一代码。
这是我第一次尝试序列化,保存和加载,这意味着我对此很陌生,因此很少了解/理解有关这些主题的概念。
非常感谢建议: - )