/*
Читаем и пишем в файл: Human
Реализуй логику записи в файл и чтения из файла для класса Human.
Поле name в классе Human не может быть пустым.
Метод main реализован только для вас и не участвует в тестировании.
Требования:
1. Логика чтения/записи реализованная в методах save/load должна работать корректно в случае, если список assets пустой.
2. Логика чтения/записи реализованная в методах save/load должна работать корректно в случае, если поле name и список assets не пустые.
3. Класс Solution.Human должен быть публичным.
*/
public class Solution {
public static void main(String[] args) {
//todo исправьте outputStream/inputStream в соответствии с путем к вашему реальному файлу
try {
File your_file_name = File.createTempFile("your_file_name", null);
System.out.println(your_file_name.getAbsolutePath());
OutputStream outputStream = new FileOutputStream(your_file_name);
InputStream inputStream = new FileInputStream(your_file_name);
Human ivanov = new Human("Ivanov", new Asset("home", 999_999.99), new Asset("car", 2999.99));
ivanov.save(outputStream);
outputStream.flush();
Human somePerson = new Human();
somePerson.load(inputStream);
inputStream.close();
//todo проверьте тут, что ivanov и somePerson равны
if (ivanov.equals(somePerson)){System.out.println("true");}
else{System.out.println("false");}
} 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 Human {
public String name;
public List<Asset> assets = new ArrayList<>();
public Human() {
}
public Human(String name, Asset... assets) {
this.name = name;
if (assets != null) {
this.assets.addAll(Arrays.asList(assets));
}
}
public void save(OutputStream outputStream) throws Exception { //из объекта в файл
//todo реализуйте этот метод
PrintWriter writer = new PrintWriter(outputStream);
writer.print(name+",");
System.out.println("#1 " + name);
if (assets.size()>0){
for (int i = 0; i < assets.size(); i++) {
Asset a = assets.get(i);
writer.print(a.getName() + ",");
System.out.println("#2 " + a.getName());
writer.print(a.getPrice());
System.out.println("#3 " + a.getPrice());
if (i != assets.size()-1){
writer.print(",");
}
}
}else {
System.out.println();
}
writer.flush();
}
//todo Логика чтения/записи реализованная в методах save/load должна работать корректно в случае, если поле name и список assets не пустые.
public void load(InputStream inputStream) throws Exception {
//todo реализуйте этот метод
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
while (reader.ready()){
String[] strs = reader.readLine().split(",");
name = strs[0];
System.out.println("1" + name);
Human person = new Human(name);
for (int i = 1; i <strs.length ; i+=2) {
System.out.println("2 " + strs[i]);
System.out.println("3 " + strs[i+1]);
Asset ass = new Asset(strs[i], Double.parseDouble(strs[i+1])); //todo ошибка
person.assets.add(ass);
}
}
inputStream.close();
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Human human = (Human) o;
if (name != null ? !name.equals(human.name) : human.name != null) return false;
return assets != null ? assets.equals(human.assets) : human.assets == null;
}
@Override
public int hashCode() {
int result = name != null ? name.hashCode() : 0;
result = 31 * result + (assets != null ? assets.hashCode() : 0);
return result;
}
}
}
package com.javarush.task.task20.task2001;
import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/*
Читаем и пишем в файл: Human
Реализуй логику записи в файл и чтения из файла для класса Human.
Поле name в классе Human не может быть пустым.
Метод main реализован только для вас и не участвует в тестировании.
Требования:
1. Логика чтения/записи реализованная в методах save/load должна работать корректно в случае, если список assets пустой.
2. Логика чтения/записи реализованная в методах save/load должна работать корректно в случае, если поле name и список assets не пустые.
3. Класс Solution.Human должен быть публичным.
*/
public class Solution {
public static void main(String[] args) {
//todo исправьте 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);
Human ivanov = new Human("Ivanov", new Asset("home", 999_999.99), new Asset("car", 2999.99));
ivanov.save(outputStream);
outputStream.flush();
Human somePerson = new Human();
somePerson.load(inputStream);
inputStream.close();
//todo проверьте тут, что ivanov и somePerson равны
if (ivanov.equals(somePerson)){System.out.println("true");}
else{System.out.println("false");}
} 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 Human {
public String name;
public List<Asset> assets = new ArrayList<>();
public Human() {
}
public Human(String name, Asset... assets) {
this.name = name;
if (assets != null) {
this.assets.addAll(Arrays.asList(assets));
}
}
public void save(OutputStream outputStream) throws Exception {
//todo реализуйте этот метод
PrintWriter writer = new PrintWriter(outputStream);
if (assets.size()>0){
for (Asset a:assets) {
writer.println(name+",");
writer.println(a.getName() + ",");
writer.println(a.getPrice());
}
}
writer.flush();
}
public void load(InputStream inputStream) throws Exception {
//todo реализуйте этот метод
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
while (reader.ready()){
String[] strs = reader.readLine().split(",");
name = strs[0];
for (int i = 1; i <strs.length-1 ; i++) {
Asset ass = new Asset(strs[i], Double.parseDouble(strs[i+1]));
Human person = new Human(name);
person.assets.add(ass);
}
}
inputStream.close();
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Human human = (Human) o;
if (name != null ? !name.equals(human.name) : human.name != null) return false;
return assets != null ? assets.equals(human.assets) : human.assets == null;
}
@Override
public int hashCode() {
int result = name != null ? name.hashCode() : 0;
result = 31 * result + (assets != null ? assets.hashCode() : 0);
return result;
}
}
}