Задачу то я решил, но только когда она были принята я подумал а почему в методе load() не надо создавать новый экземпляр users?
user = new ArrayList<>() и затем в него записыввать данные файла.
Ведь при загрузки обекта его состояние должно быть считано из потока и быть точно такое же как и в потоке, но что если перед считываением состояния из потока в users уже будут какие то значения? Данные из потока ведь просто добавятся в этот список к тем что были там изначально. В правильном решение кстати так же как и у меня сделано.
public void save(OutputStream outputStream) throws Exception {
//implement this method - реализуйте этот метод
if (users != null && users.size() > 0)
{
try (OutputStreamWriter osw = new OutputStreamWriter(outputStream);
BufferedWriter writer = new BufferedWriter(osw))
{
for (int i = 0; i < users.size(); i++)
{
User currentUser = users.get(i);
writer.write(currentUser.getFirstName() + "\n");
writer.write(currentUser.getLastName() + "\n");
writer.write(currentUser.getBirthDate().getTime() + "\n");
writer.write(currentUser.isMale() + "\n");
writer.write(currentUser.getCountry() + "\n");
}
}
}
}
public void load(InputStream inputStream) throws Exception {
//implement this method - реализуйте этот метод
try (InputStreamReader isr = new InputStreamReader(inputStream);
BufferedReader reader = new BufferedReader(isr))
{
while (reader.ready())
{
String firstName = reader.readLine();
String lastName = reader.readLine();
Date birthDate = new Date(Long.parseLong(reader.readLine()));
boolean isMale = Boolean.parseBoolean(reader.readLine());
User.Country country = User.Country.valueOf(reader.readLine());
User user = new User();
user.setFirstName(firstName);
user.setLastName(lastName);
user.setBirthDate(birthDate);
user.setMale(isMale);
user.setCountry(country);
users.add(user);
}
}
}
Денис
29 уровень
Почему в users не надо создавать новый экземпляр users?
Решен
Комментарии (3)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Денис
15 января 2021, 19:10
это всё понятно, но что если создастся обьект JavaRush, я с ним поработаю (добавлю что то в users) и потом захочу загрузить в этот обект то что хранится в файле? или такое делать некорректно и загружать можно только в только что созданный объект?
0
hidden #2322530
15 января 2021, 19:14решение
ты слишком много логики пытаешься вложить в учебную задачу.
+2
hidden #2322530
15 января 2021, 18:49
давай почитаем код вместе с тобой.
в классе JavaRush есть поле users, которое при создании объекта инициализируется пустым списком.
а прежде чем ты делаешь загрузку данных через load, ты что делаешь?
правильно, создаёшь новый объект JavaRush, который в свою очередь заполняет поле users новым списком)
поэтому в методе load() не надо создавать список, он у тебя создаётся сразу при создании объект JavaRush
более того, а если ты захочешь загружать несколько раз подряд из разных объектов в один? у тебя будет обнуляться предыдущая информация значит (при создании списка в load()). это некорректно. ведь для этого тогда проще использовать глубокое клонирование)
0