java-如何将序列化的文件加载回arrayList
作者:互联网
香港专业教育学院已经看过这个问题上的一些问题,但无法解决我的问题.
正如您在下面看到的,我通过序列化将我的Patient ArrayList(pList-在类顶部是私有的)中的所有对象保存到“ Patient.ser”文件中.据我所知,这没有任何问题. “ patSizeAtSave”是一个私有变量,我在加载文件时将其标记为绑定对象(请参见下文)
“ patModel”是我在GUI中用于JList的DefaultListModel,因此我尝试使用添加回Patient ArrayList(pList)的列表填充这些列表
我的问题:当我点击GUI上的load按钮时,它将调用下面的loadPatientList()方法,但是JLists中没有任何内容,因此我根本无法确定它是否有效.
有想法该怎么解决这个吗?
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);
}
}
解决方法:
保存后,您是否尝试将患者列表加载到相同的JVM中(不退出JVM)?
因为如果在重新加载患者列表之前退出JVM,则patSizeAtSave将被重置为0(因为它没有保存到任何文件/永久性存储中),而仅在内存中.当您在新的JVM中调用loadPatientList时,因为patSizeAtSave为0,所以for循环不会加载任何患者.
您应该保存整个列表pList(假设您使用List的Serializable实现,例如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());
}
这样,列表大小也将保存在序列化文件中.
问候
标签:jlist,arraylist,load,java,serializable 来源: https://codeday.me/bug/20191031/1972972.html