我有一个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);
}
});
如果有人可以解释如何将数据保存到文件中,然后在程序启动时从该文件重新加载数据,那就太好了。
答案 0 :(得分:2)
要序列化列表,列表保持的所有对象都必须是可序列化的。
所以你的class blackTeam
必须实现Serializable接口。
class blackTeam implements Serializable { ... }
答案 1 :(得分:0)
是的,似乎序列化是要走的路...... 对于具有嵌套对象的对象,可以将对象值存储在java-Database中(例如HSQLDB和H2)。这些数据库作为jar包含在项目中,据我记得存储在文件中的值。然后,表模型可以直接对应于Object层次结构......可以更容易地存储和检索对象,但可能是简单对象的开销。
对于更大和嵌套的对象,我建议评估这个替代方案,因为我相信要记住(不要让我这么做),序列化有它的限制。
这里有两个关于google搜索的链接&#34; java将对象存储为文件&#34; link1
答案 2 :(得分:0)
您必须决定将序列化数据的方式。您可以将它与序列化中内置的Java一起使用,您必须在其中使用Serializable
类实现blackTeam
接口。
public class blackTeam implements Serializable {
//...
}
现在您已经有了保存文件的方法,只需要一个方法将文件读入对象。
public List<blackTeam> loadTeam() throws IOException, ClassNotFoundException
{
FileInputStream fileIn = null;
ObjectInputStream in = null;
List<blackTeam> teams = null;
try
{
fileIn = new FileInputStream( "blackTeam" );
in = new ObjectInputStream( fileIn );
teams = (List<blackTeam>)in.readObject();
}
finally
{
if( fileIn != null )
fileIn.close();
if( in != null )
in.close();
}
return teams;
}
注意,还有其他方法可以序列化对象。您可以使用JSON表示法并以JSON格式保存对象,以便更具可转移性。您可以使用外部库来执行JSON格式化,例如Jackson
答案 3 :(得分:0)
序列化是您将对象保存到文件所需的路径。这篇here是一篇关于如何做的好文章,以及它的例子。
此外,您对类名称的命名约定不正确。它应该是UpperCamelCased而不是camelCased。但是,您的变量会检出。