/* Читаем и пишем в файл: JavaRush Реализуйте логику записи в файл и чтения из файла для класса JavaRush. В файле your_file_name.tmp может быть несколько объектов JavaRush. Метод main реализован только для вас и не участвует в тестировании. Требования: 1. Логика чтения/записи реализованная в методах save/load должна работать корректно в случае, если список users пустой. 2. Логика чтения/записи реализованная в методах save/load должна работать корректно в случае, если список users не пустой. */
package com.javarush.task.task20.task2002;

import java.io.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;


public class Solution {
    public static void main(String[] args) {
        //you can find your_file_name.tmp in your TMP directory or fix outputStream/inputStream according to your real file location
        //вы можете найти your_file_name.tmp в папке TMP или исправьте outputStream/inputStream в соответствии с путем к вашему реальному файлу
        try {
            File your_file_name = File.createTempFile("your_file_name", null);
            System.out.println(your_file_name.getAbsolutePath());
            //C:\Users\9875~1\AppData\Local\Temp\your_file_name9082282180132967879.tmp

            OutputStream outputStream = new FileOutputStream(your_file_name);
            InputStream inputStream = new FileInputStream(your_file_name);

            JavaRush javaRush = new JavaRush();
            //initialize users field for the javaRush object here - инициализируйте (заполните) поле users для объекта javaRush тут
            User user1 = new User();
            user1.setBirthDate(new Date());
            user1.setCountry(User.Country.OTHER);
            user1.setFirstName("Vasy");
            user1.setLastName("Petrov");
            user1.setMale(true);

            javaRush.users.add(user1);

            javaRush.save(outputStream);
            outputStream.flush();

            JavaRush loadedObject = new JavaRush();
            loadedObject.load(inputStream);
            //check here that javaRush object equals to loadedObject object - проверьте тут, что javaRush и loadedObject равны
            if (loadedObject.equals(javaRush)) {
                System.out.println("да");
            }else{
                System.out.println("нет");
            }

            outputStream.close();
            inputStream.close();

        } catch (IOException e) {
            //e.printStackTrace();
            System.out.println("Oops, something wrong with my file");
        } catch (Exception e) {
            //e.printStackTrace();
            System.out.println("Oops, something wrong with save/load method");
        }
    }

    public static class JavaRush {
        public List<User> users = new ArrayList<>();

        public void save(OutputStream outputStream) throws Exception {//содержимое списка сохранять в файл
            //implement this method - реализуйте этот метод
            PrintWriter writer = new PrintWriter(outputStream);
            if (users.size()>0){
                for (User u: users) {
                    SimpleDateFormat format = new SimpleDateFormat("dd.MM.yyyy hh:mm:ss:S", Locale.ENGLISH);
                    writer.print(u.getFirstName()+",");
                    System.out.println(u.getFirstName());
                    writer.print(u.getLastName()+",");
                    System.out.println(u.getLastName());
                    writer.print(format.format(u.getBirthDate()) + ",");//записывать через SimpleDateFormat
                    System.out.println(format.format(u.getBirthDate()));
                    writer.print(u.isMale()+",");
                    System.out.println(u.isMale() + "");
                    writer.println(u.getCountry());
                    System.out.println(u.getCountry() + "");
                }
            }else {
                return;
            }
            writer.flush();
        }

        public void load(InputStream inputStream) throws Exception {
            //implement this method - реализуйте этот метод
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            while(reader.ready()){
                String[] strings = reader.readLine().split(",");
                //todo Совет по второй задаче: в дату рождения также входят час, минута и миллисекунда.
                SimpleDateFormat format = new SimpleDateFormat("dd.MM.yyyy hh:mm:ss:S", Locale.ENGLISH);
                User user = new User();
                user.setFirstName(strings[0]);
                System.out.println("#1" + strings[0]);
                user.setLastName(strings[1]);
                System.out.println("#2" + strings[1]);

                user.setBirthDate(format.parse(strings[2]));
                System.out.println("#3" + strings[2]);

                user.setMale(Boolean.parseBoolean(strings[3]));
                System.out.println("#4" + strings[3]);
                user.setCountry(User.Country.valueOf(strings[4]));
                System.out.println("#5" + strings[4]);
                users.add(user);
            }

        }

        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            JavaRush javaRush = (JavaRush) o;

            return users != null ? users.equals(javaRush.users) : javaRush.users == null;

        }

        @Override
        public int hashCode() {
            return users != null ? users.hashCode() : 0;
        }
    }
}
Полученный вывод: C:\Users\9875~1\AppData\Local\Temp\your_file_name5226831833287788552.tmp Vasy Petrov 29.10.2017 08:10:48:366 true OTHER #1Vasy #2Petrov #329.10.2017 08:10:48:366 #4true #5OTHER нет "Нет" - значит, объекты НЕ ОДИНАКОВЫЕ! Почему они не одинаковые? Почему я прошла тестирование, если они не одинаковые? Кроме того, я прошла тестирование со всеми вот этими выводами в консоль, которых, по идее, быть не должно было. Честно говоря, когда программа неожиданно проходит тестирование, это запутывает еще сильнее, чем когда программа неожиданно не проходит тестирование...