Десериализация объекта в Java - PullRequest
0 голосов
/ 21 мая 2018

В настоящее время я работаю над проектом Java с графическим интерфейсом.У меня есть две формы.Один для регистрации и один для входа.Форма SignUp создает объект «Клиент» или «Сотрудник» на основе ввода пользователя и сохраняет его в файле «.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);
            }

Выводится только первый объект в файле.

1 Ответ

0 голосов
/ 21 мая 2018

outputStream.writeObject() заменит ранее написанные объекты.

Одно из возможных решений - добавить их в класс контейнера со списками объектов Client / Employee и вместо этого сериализовать / десериализовать этот класс контейнера.

...