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

将对象的Arraylist保存到外部文件Java,java,serialization,arraylist,save,deserialization,Java,Serialization,Arraylist,Save,Deserialization,我设置了一个arrayList来保存玩家数据。每个球员都包含几个元素,即球衣号码、名字、姓氏、首选位置、进球和助攻。我希望能够保存这些数据,这样当我重新启动程序时,数据仍然是完全相同的格式。从我读到的一些资料来看,连载似乎是一条出路?这是正确的还是有更好的方法?我是Java新手,所以任何例子都会很棒。我已经附上了我的代码的几个适用片段 //arrayList的创建 public class LeagueDatabase extends javax.swing.JFrame { Arra

我设置了一个arrayList来保存玩家数据。每个球员都包含几个元素,即球衣号码、名字、姓氏、首选位置、进球和助攻。我希望能够保存这些数据,这样当我重新启动程序时,数据仍然是完全相同的格式。从我读到的一些资料来看,连载似乎是一条出路?这是正确的还是有更好的方法?我是Java新手,所以任何例子都会很棒。我已经附上了我的代码的几个适用片段

//arrayList的创建

public class LeagueDatabase extends javax.swing.JFrame {
     ArrayList <blackTeam> blackTeam = new ArrayList <blackTeam>();
//如何添加数据

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);
        }
    });

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

要序列化列表,列表包含的所有对象都必须是可序列化的

因此,您的
类blackTeam
必须实现可序列化接口

class blackTeam implements Serializable { ... }

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

因此,您的
类blackTeam
必须实现可序列化接口

class blackTeam implements Serializable { ... }

是的,看来序列化是一条路要走。。。 对于具有嵌套对象的对象,可以将对象值存储在java数据库中(例如HSQLDB amd H2)。这些数据库作为jar包含在项目中,据我记忆所及,它们将值存储在文件中。然后,表模型可以直接对应于对象层次结构。。。这将使存储和检索对象变得更容易,但对于简单对象来说可能会增加开销

对于更大和嵌套的对象,我建议评估这个替代方案,因为我相信记住(不要在这方面耽误我),序列化有它的局限性

这里有两个关于谷歌搜索“java将对象存储为文件”的链接


是的,看来序列化是一条出路。。。 对于具有嵌套对象的对象,可以将对象值存储在java数据库中(例如HSQLDB amd H2)。这些数据库作为jar包含在项目中,据我记忆所及,它们将值存储在文件中。然后,表模型可以直接对应于对象层次结构。。。这将使存储和检索对象变得更容易,但对于简单对象来说可能会增加开销

对于更大和嵌套的对象,我建议评估这个替代方案,因为我相信记住(不要在这方面耽误我),序列化有它的局限性

这里有两个关于谷歌搜索“java将对象存储为文件”的链接


您必须决定以何种方式序列化数据。您可以将它与Java内置序列化一起使用,在Java内置序列化中,您必须使用
blackTeam
类实现
Serializable
接口

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;
}
public List loadTeam()引发IOException,ClassNotFoundException
{
FileInputStream fileIn=null;
ObjectInputStream in=null;
列表团队=空;
尝试
{
fileIn=newfileinputstream(“blackTeam”);
in=新的ObjectInputStream(fileIn);
teams=(列表)在.readObject()中;
}
最后
{
if(fileIn!=null)
fileIn.close();
if(in!=null)
in.close();
}
返回队;
}

注意,序列化对象还有其他方法。您可以使用JSON符号,并将对象保存为JSON格式,以便更易于传输。有一些外部库可以用来进行JSON格式化,例如

您必须决定要以何种方式序列化数据。您可以将它与Java内置序列化一起使用,在Java内置序列化中,您必须使用
blackTeam
类实现
Serializable
接口

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;
}
public List loadTeam()引发IOException,ClassNotFoundException
{
FileInputStream fileIn=null;
ObjectInputStream in=null;
列表团队=空;
尝试
{
fileIn=newfileinputstream(“blackTeam”);
in=新的ObjectInputStream(fileIn);
teams=(列表)在.readObject()中;
}
最后
{
if(fileIn!=null)
fileIn.close();
if(in!=null)
in.close();
}
返回队;
}

注意,序列化对象还有其他方法。您可以使用JSON符号,并将对象保存为JSON格式,以便更易于传输。有一些外部库可以用来进行JSON格式化,例如序列化是将对象保存到文件中所需的路径。这是一篇关于如何做到这一点的好文章,以及它的示例


此外,类名的命名约定不正确。它应该是上骆驼套而不是骆驼套。但是,变量会签出。

序列化是将对象保存到文件中所需的路径。这是一篇关于如何做到这一点的好文章,以及它的示例


此外,类名的命名约定不正确。它应该是上骆驼套而不是骆驼套。但是,您的变量会签出。

我实现了serializable,但是在代码运行时,我收到错误消息“java.io.NotSerializableException:javax.swing.GroupLayout”,您知道为什么会这样吗?至于你将文件读入对象的例子;如果我是正确的,您的示例会将其保存为列表,而不是我想要的arrayList。我还会在程序启动时运行的代码中执行“loadTeam():”来调用它吗@这是因为
GroupLayout
对象不可序列化。因此,如果在对象内部有这样的内容,除非将其标记为瞬态,否则无法序列化它。是的,当您调用程序启动时,需要调用
loadTeam()
,该程序将返回您想要的对象。是的,它将其保存为
L