Сначала, как упоминал @Nicholas K,
, поскольку вы записали User
объекты в поток, затем вы должны прочитать User
объекты после.
И, как вы сказали
Когда я попробовал это, у меня был только один объект, но мой файл включает более трех пользователей
У вас есть один объект, потому что вы читаете только один объект ,
Вызов
User user = (User) objectInputStream.readObject();
читает только один пользователь (если существует).Вызов read()
еще раз, и вы получите свой второй объект (опять же, если он существует).
Так что все, что вам нужно сделать, это:
private void readFromFile(String file){
Set<User> users = new HashSet<User>();
try(FileInputStream fileInputStream = new FileInputStream(file)){
ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
while (true) {
User user = (User) objectInputStream.readObject();
users.add(user);
}
} catch(EOFException e){
// This exception is raised because the whole file was read.
// So print the users in the set.
for (User user : users) {
System.out.println(user);
}
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}finally{
// Never forget to close the stream after you're done
if (objectInputStream!=null) {
objectInputStream.close();
}
}