Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将序列化文件加载回arrayList_Java_Arraylist_Load_Jlist_Serializable - Fatal编程技术网

Java 如何将序列化文件加载回arrayList

Java 如何将序列化文件加载回arrayList,java,arraylist,load,jlist,serializable,Java,Arraylist,Load,Jlist,Serializable,我已经考虑过这件事上的一些问题,但无法解决我的问题 如下所示,我通过序列化将我的Patient ArrayList(pList-在类的顶部是私有的)中的所有对象保存到“Patient.ser”文件中。据我所知,这是没有问题的工作。“patSizeAtSave”是一个私有变量,我正在使用它来标记为加载文件时要使用的绑定(见下文) “patModel”是我在我的GUI中用于jlist的DefaultListModel,因此我尝试用添加回患者阵列列表(pList)的内容填充这些列表。 我的问题:当我点

我已经考虑过这件事上的一些问题,但无法解决我的问题

如下所示,我通过序列化将我的
Patient ArrayList
pList
-在类的顶部是私有的)中的所有对象保存到“Patient.ser”文件中。据我所知,这是没有问题的工作。“
patSizeAtSave
”是一个私有变量,我正在使用它来标记为加载文件时要使用的绑定(见下文)

patModel
”是我在我的
GUI
中用于
jlist
DefaultListModel
,因此我尝试用添加回
患者阵列列表(pList)的内容填充这些列表。

我的问题:当我点击
GUI
上的加载按钮时,它会调用下面的
loadPatientList()
方法,但我的jList中没有任何内容,因此我无法判断它是否有效

有没有办法解决这个问题

private void savePatientList() throws FileNotFoundException {
    try
    {
    FileOutputStream fs = new FileOutputStream("Patient.ser");
    ObjectOutputStream os = new ObjectOutputStream(fs);
    for(Patient p: pList)
    {
        os.writeObject(p);
    }
    fs.close();
    os.close();
    patSizeAtSave = pList.size();
    JOptionPane.showMessageDialog(jTabPane, "Save Complete!", "Notification", JOptionPane.INFORMATION_MESSAGE);
    } 
    catch (IOException ex) {
        Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex);
    } 

}
private void loadPatientList()
{
    FileInputStream fs;
    ObjectInputStream is;
    try
    {
    fs = new FileInputStream("Patient.ser");
    is = new ObjectInputStream(fs);

    for(int i = 0; i < patSizeAtSave; i++)
    {
        Patient p = (Patient) is.readObject();
        pList.add(p);
        patModel.addElement(p.getPNo() + ": " + p.getPName());
    }
    jListPatient.setModel(patModel);
    jListPatient2.setModel(patModel);
    fs.close();
    is.close();
    } 
    catch (FileNotFoundException ex) {
        Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IOException | ClassNotFoundException ex) {
        Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex);
    }
}
private void savePatientList()引发FileNotFoundException{
尝试
{
FileOutputStream fs=新的FileOutputStream(“Patient.ser”);
ObjectOutputStream os=新的ObjectOutputStream(fs);
用于(患者p:pList)
{
os.writeObject(p);
}
fs.close();
os.close();
patSizeAtSave=pList.size();
显示消息对话框(jTabPane,“保存完成!”,“通知”,JOptionPane.INFORMATION\u消息);
} 
捕获(IOEX异常){
Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE,null,ex);
} 
}
私有void loadPatientList()
{
文件输入流;
目的输入流是;
尝试
{
fs=新文件输入流(“Patient.ser”);
is=新的ObjectInputStream(fs);
对于(int i=0;i
保存后是否尝试将患者列表加载到同一JVM中(不退出JVM)? 因为如果在重新加载患者列表之前退出JVM,则patSizeAtSave将重置为0(因为它不会保存到任何文件/持久存储),而只保存在内存中。在新JVM中调用loadPatientList时,for循环不会加载任何患者,因为patSizeAtSave为0

您应该保存整个列表pList(假设您使用列表的可序列化实现,如ArrayList/LinkedList),如下所示:

FileOutputStream fs = new FileOutputStream("Patient.ser");
ObjectOutputStream os = new ObjectOutputStream(fs);
os.writeObject(pList);
并将其加载回:

pList = (List<Patient>) is.readObject();
for(Patient p: pList)
{
    patModel.addElement(p.getPNo() + ": " + p.getPName());
}
pList=(List)是.readObject();
用于(患者p:pList)
{
patModel.addElement(p.getPNo()+“:”+p.getPName());
}
这样,列表大小也将保存在序列化文件中


问候

非常感谢你,伙计!现在工作没有问题了!私有变量patSaveAtSize出现了一个愚蠢的错误,我忘了它不见了。。。不过,我以前确实尝试过将整个arraylist作为对象保存和加载,但我没有做的是在代码的arraylist回溯部分包含“”。再次非常感谢。很高兴我能帮忙。请您投票并将您的问题标记为已回答。提前谢谢你的时间。酷男人:好了,我是这个网站的新手,所以我以后一定要记得把它总结一下