gpt4 book ai didi

java - java中反序列化对象

转载 作者:行者123 更新时间:2023-12-02 11:13:25 26 4
gpt4 key购买 nike

我目前正在开发一个带有 GUI 的 java 项目。我有两种形式。一种用于注册,一种用于登录。注册表单根据用户输入创建“客户”或“员工”对象,并将其存储在“.ser”文件中。对于我的登录,我想通过将对象存储在 ArrayList 中来反序列化此文件,并从该 ArrayList 中搜索每个对象中的电子邮件和密码。如果存在,则登录应该成功。但是,我的代码仅读取文件中的第一个对象,而不是全部。

这是我的简化代码。

//Code for Writing to File. Client Object is created through user input in GUI
try{
Address a1=new Address(Integer.parseInt(houseNumberField.getText()),Integer.parseInt(streetNumberField.getText()),cityField.getText(),provinceField.getText());
Client c1=new Client(firstNameField.getText(),lastNameField.getText(),emailField.getText(),passwordField.getText(),Float.parseFloat(phoneField.getText()),Float.parseFloat(CNICField.getText()),a1);
OutputStream out=null;
ObjectOutputStream outputStream=null;
FileOutputStream fileOut=null;
try
{
fileOut=new FileOutputStream("ClientList.ser",true);
outputStream=new ObjectOutputStream(fileOut);
outputStream.writeObject(c1);
JOptionPane.showMessageDialog (null,"record saved","Information",JOptionPane.INFORMATION_MESSAGE);
}
catch(IOException e)
{
System.out.println("Error while opening file");
}
finally {
try {
if(outputStream != null && fileOut!=null) {
outputStream.close();
fileOut.close();
}
}
catch (IOException e)
{
System.out.println("IO Exception while closing file");
}
}

阅读代码:

try{

ObjectInputStream x = new ObjectInputStream(new FileInputStream("EmployeeList.ser"));
while(true){
try{
Employee a=(Employee) x.readObject();
System.out.println(a);
e1.add(a);
}
catch(EOFException e)
{

e.printStackTrace();
break;
}

}
}
catch(FileNotFoundException e)
{

} catch (IOException ex) {
return ;
} catch (ClassNotFoundException ex) {
Logger.getLogger(loginGUI.class.getName()).log(Level.SEVERE, null, ex);
}

它只输出文件中的第一个对象。

最佳答案

outputStream.writeObject() 将替换之前写入的对象。

一种可能的解决方案是将它们添加到包含 Client/Employee 对象列表的容器类中,然后序列化/反序列化该容器类。

关于java - java中反序列化对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50454190/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com