package com.javarush.test.level20.lesson02.task02;

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

/* Читаем и пишем в файл: JavaRush
Реализуйте логику записи в файл и чтения из файла для класса JavaRush
В файле your_file_name.tmp может быть несколько объектов JavaRush
Метод main реализован только для вас и не участвует в тестировании
*/
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);
            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 тут
            javaRush.save(outputStream);
            outputStream.flush();
            JavaRush loadedObject = new JavaRush();
            loadedObject.load(inputStream);
            //check here that javaRush object equals to loadedObject object - проверьте тут, что javaRush и loadedObject равны
            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<User>();
        public void save(OutputStream outputStream) throws Exception {
            PrintWriter writer = new PrintWriter(outputStream);
            writer.println(users.size());
            for (User user : users){
                writer.println(user.getFirstName());
                writer.println(user.getLastName());
                writer.println(user.getBirthDate().getTime());
                writer.println(user.isMale());
                writer.println(user.getCountry().getDisplayedName());
            }
            writer.flush();
            //implement this method - реализуйте этот метод
        }
        public void load(InputStream inputStream) throws Exception {
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            int size = Integer.parseInt(reader.readLine());
            if (size > 0){
                for (int i = 0; i < size; i++){
                    User user = new User();
                    user.setFirstName(reader.readLine());
                    user.setLastName(reader.readLine());
                    user.setBirthDate(new Date(Long.parseLong(reader.readLine())));
                    user.setMale(Boolean.parseBoolean(reader.readLine()));
                    String s = reader.readLine();
                    if (s.equals("Ukraine")){
                        user.setCountry(User.Country.UKRAINE);
                    }
                    else if(s.equals("Russia")){
                        user.setCountry(User.Country.RUSSIA);
                    }
                    else if (s.equals("Other")){
                        user.setCountry(User.Country.OTHER);
                    }
                    users.add(user);
                }
            }
            //implement this method - реализуйте этот метод
        }
    }
}

 

package com.javarush.test.level20.lesson02.task02;

import java.util.Date;

public class User {
    private String firstName;
    private String lastName;
    private Date birthDate;
    private boolean isMale;
    private Country country;

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public Date getBirthDate() {
        return birthDate;
    }

    public void setBirthDate(Date birthDate) {
        this.birthDate = birthDate;
    }

    public boolean isMale() {
        return isMale;
    }

    public void setMale(boolean male) {
        isMale = male;
    }

    public Country getCountry() {
        return country;
    }

    public void setCountry(Country country) {
        this.country = country;
    }

    public static enum Country {
        UKRAINE("Ukraine"),
        RUSSIA("Russia"),
        OTHER("Other");

        private String name;

        private Country(String name) {
            this.name = name;
        }

        public String getDisplayedName() {
            return this.name;
        }
    }

}

А ВОТ НЕ ПРОШЕДШИЙ, НО ТОЖЕ ИНТЕРЕСНЫЙ КОД:

package com.javarush.test.level20.lesson02.task02;

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

/* Читаем и пишем в файл: JavaRush
Реализуйте логику записи в файл и чтения из файла для класса JavaRush
В файле your_file_name.tmp может быть несколько объектов JavaRush
Метод main реализован только для вас и не участвует в тестировании
*/
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("users_for_20-02-02", null);
            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 тут
            javaRush.save(outputStream);
            outputStream.flush();

            JavaRush loadedObject = new JavaRush();
            loadedObject.load(inputStream);
            //check here that javaRush object equals to loadedObject object - проверьте тут, что javaRush и loadedObject равны

            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 {
            PrintWriter writer = new PrintWriter(outputStream);
            for (User user : users) {
                if (user.getFirstName() != null) writer.println("yes," + user.getFirstName() + ",");
                else writer.print("no,null,");
                if (user.getLastName() != null) writer.println("yes," + user.getLastName() + ",");
                else writer.print("no,null,");
                if (user.getBirthDate() != null) writer.println("yes," + user.getBirthDate() + ",");
                else writer.print("no,null,");
                writer.print(user.isMale() + ",");
                if (user.getCountry() != null) writer.println("yes," + user.getCountry() + ",");
                else writer.print("no,null,");
                writer.println("");
            }
            writer.close();
        }

        public void load(InputStream inputStream) throws Exception {
            DataInputStream stream = new DataInputStream(inputStream);
            SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy");
            String line;
            while((line = stream.readLine()) != null) {
                User user = new User();
                String[] data = line.split(",");
                if (data[0].equals("yes")) user.setFirstName(data[1]);
                if (data[2].equals("yes")) user.setLastName(data[3]);
                if (data[4].equals("yes")) user.setBirthDate(dateFormat.parse(data[5]));
//                if (data[6].equals("true")) user.setMale(true);
//                if (data[6].equals("false")) user.setMale(false);
                user.setMale(Boolean.parseBoolean(data[6]));
                if (data[7].equals("yes")) user.setCountry(User.Country.valueOf(data[8]));
                users.add(user);
            }
            stream.close();
        }
    }
}