/*
Читаем и пишем в файл: 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
нет
"Нет" - значит, объекты НЕ ОДИНАКОВЫЕ! Почему они не одинаковые? Почему я прошла тестирование, если они не одинаковые? Кроме того,
я прошла тестирование со всеми вот этими выводами в консоль, которых, по идее, быть не должно было. Честно говоря, когда программа неожиданно проходит тестирование, это запутывает еще сильнее, чем когда программа неожиданно не проходит тестирование...