Читаем и пишем в файл: JavaRush

  • 11
  • Недоступна
А теперь пороемся в файлах студентов… И реализуем логику записи в файл/чтения из файла для класса JavaRush с данными учеников. Метод main реализован только для вас и не участвует в тестировании.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (208)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Юлия20 уровень, Санкт-Петербург
13 июня, 14:51
хух, с восьмой попытки, ошибки как у многих - не учла, что юзеров может быть много, не учла что нужны миллисекунды. хотела бы я посмотреть на человека, который учел это и сделал с первой попытки, ладно первое, тут надо было догадаться, но второе то как предвидеть, это не логично, кому нужны миллисекунды и даже минуты в дате рождения))
Антон23 уровень, Санкт-Петербург
17 июня, 13:26
Дело не в том что не нужны миллисекунды/минуты(тут зависит от предъявленных требований), а в эквивалентности исходных и восстановленных данных. Посмотрите как реализована проверка на эквивалентность. В задаче конечно только требовалось добавить "запись/чтение", но разобраться как работает остальной зависимый код очень важно. В рабочих проектах большая часть работы это не написание нового функционала а правка уже существующего и важно внести изменения так, чтобы код продолжал работать как должен.
Юлия20 уровень, Санкт-Петербург
17 июня, 13:34
большое спасибо за пояснение, я затупок. действительно, было полное значение а я его получается обрезаю.
skybright23 уровень
10 июня, 18:36
0. Долго не мог понять почему конвертируя long1 в массив байт через ByteBuffer, при обратном преобразовании в long2, long1 не равен long2. Так и не понял. 1. Короче, проще записать long в виде строки и считать его обратно long L = Long.parseLong(reader.readLine()). 2.Да, я использовал StringBuilder с разделителем "\n" для записи в OutputStream, и BufferedReader для чтения построчно.
АртемGeek25 уровень, Москва
1 июня, 17:25
Самое сложное оказалось получить дату из записанной в файле. Сделал как советовали через new Date(Long long)
Date currentDate = new Date(121244l); // Сначало в таком формате записываем, добавляя .getTime()
потом получаем
Date date = new Date(Long.parseLong(br.readLine()));
user.setBirthDate(date);
PS конструктор класса User создавать не надо)
Oleg Zubkov22 уровень, Москва
28 мая, 15:46
Можно решить без Printwritter через write, но забывайте разделять нового юзера например переносом строки, оч глупо, но маялся долго.
NewBuy23 уровень, Санкт-Петербург
2 мая, 07:01
Все конечно очень хорошо, только вот если в users добавить юзера с непроинициализированными полями, код, который принимает валидатор никогда не будет давать проверку на true сохраненного юзера и загруженного
Tanarri28 уровень
30 апреля, 08:33
чуток пострадал из за попытки сохранить страну в виде user.getCountry().getDisplayName() и считать как User.Country.valueOf(.............). убрал в сохранении getDisplayName() и все заработало. А с датами все просто: сохранил лонг, восстановил через new Date(long Date)
Антон25 уровень, Москва
20 апреля, 13:10
помучался со сравнением дат, продебажал увидел что даты не равны,нужно было учитывать миллисекунды.. а так не сложно
Александр23 уровень, Казань
27 марта, 11:57
Совет: убрать try-catch и пробросить все Exceptions выше, чтобы видеть где проблема.
Николай22 уровень
27 марта, 18:17
Лучше использовать дебагер - это такой же необходимый опыт, как и само программирование.
Николай22 уровень
20 марта, 09:46
Уфф ... Хорошая задачка ... С датой все просто - используем new Date по умолчанию, а строку парсим
new SimpleDateFormat("E MMM dd HH:mm:ss z yyyy").parse(parametr)
Danila Bogdanov27 уровень, Уфа
27 марта, 17:32
Я примитивнее сделал, запись в long и обратно.
writer.write(user.getBirthDate().getTime());
//**************
long dateTime = Long.parseLong(reader.readLine());
user.setBirthDate(new Date(dateTime));
Антон25 уровень, Москва
20 апреля, 13:08
красиво
Lex28 уровень, Москва
13 марта, 20:13
Долго мучился со страной,посмотрел коммент ниже,нашел штуку которая помогла,без нее валидатор говорил об исключении load/save.может еще кому поможет: chel.setCountry(User.Country.valueOf(par5.toUpperCase()));