将对象的Arraylist保存到外部文件Java

时间:2017-02-10 19:53:34

标签: java serialization arraylist save deserialization

我有一个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);
        }
    });

如果有人可以解释如何将数据保存到文件中,然后在程序启动时从该文件重新加载数据,那就太好了。

4 个答案:

答案 0 :(得分:2)

要序列化列表,列表保持的所有对象都必须是可序列化的。

所以你的class blackTeam必须实现Serializable接口。

class blackTeam implements Serializable { ... }

答案 1 :(得分:0)

是的,似乎序列化是要走的路...... 对于具有嵌套对象的对象,可以将对象值存储在java-Database中(例如HSQLDB和H2)。这些数据库作为jar包含在项目中,据我记得存储在文件中的值。然后,表模型可以直接对应于Object层次结构......可以更容易地存储和检索对象,但可能是简单对象的开销。

对于更大和嵌套的对象,我建议评估这个替代方案,因为我相信要记住(不要让我这么做),序列化有它的限制。

这里有两个关于google搜索的链接&#34; java将对象存储为文件&#34; link1

link2

答案 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。但是,您的变量会检出。