我有一个arrayList设置为保存玩家数据。每名球员都有几个元素,分别是球衣号码,名字,姓氏,首选位置,进球和助攻。我希望能够保存这些数据,以便在重新启动程序时数据的格式仍然完全相同。从我读过的一些东西看,序列化看起来是一种方式?这是正确的还是有更好的方法?我是Java的新手,所以任何示例都会很棒。我附上了我的代码的几个适用的片段。将对象的Arraylist保存到外部文件Java
//创建ArrayList的
public class LeagueDatabase extends javax.swing.JFrame {
ArrayList <blackTeam> blackTeam = new ArrayList <blackTeam>();
//类是如何构成的
class blackTeam {
int goals, assists;
String jerseyNum, firstName, lastName, prefPosition;
blackTeam (String _jerseyNum, String _firstName, String _lastName, String _prefPosition, int _goals, int _assists) {
jerseyNum = _jerseyNum;
firstName = _firstName;
lastName = _lastName;
prefPosition = _prefPosition;
goals = _goals;
assists = _assists;
}
}
//数据是如何添加
black = new blackTeam(jerseyNum, firstName, lastName, prefPosition, goals, assists);
blackTeam.add(black);
//我有什么迄今保存数据
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
try{
FileOutputStream fos= new FileOutputStream("blackTeam");
ObjectOutputStream oos= new ObjectOutputStream(fos);
oos.writeObject(blackTeam);
oos.close();
fos.close();
}catch(IOException ioe){
ioe.printStackTrace();
}
//close program
System.exit(0);
}
});
如果有人可以解释如何将数据保存到一个文件,然后该程序启动时从该文件重新加载数据,这将是巨大的。
我实现了序列化,但我得到的错误信息“java.io.NotSerializableException:javax.swing.GroupLayout”当代码运行时,你知道这是为什么?至于你将文件读入对象的例子;如果我是正确的,你的例子将它保存为一个列表,而不是像我想要的那样的一个arrayList。我也可以通过在程序启动时运行的代码中执行“loadTeam():”来调用它。 @Orin – ckorvee
这是因为'GroupLayout'对象不是可序列化的。因此,如果你的对象内有这样的内容,除非将其标记为瞬态,否则无法序列化它。是的,当你调用程序启动时,你需要调用'loadTeam()',这会返回你想要的对象。是的,它将它保存为List,但ArrayList是List的一个实现。如果你真的想,你可以用'ArrayList'来交换我的例子。 @ckorvee – Orin