Читаем и пишем в файл: Human Реализуй логику записи в файл и чтения из файла для класса Human. Поле name в классе Human не может быть пустым. Метод main реализован только для вас и не участвует в тестировании. Требования: 1. Логика чтения/записи реализованная в методах save/load должна работать корректно в случае, если список assets пустой. 2. Логика чтения/записи реализованная в методах save/load должна работать корректно в случае, если поле name и список assets не пустые. 3. Класс Solution.Human не должен поддерживать интерфейс Serializable. 4. Класс Solution.Human должен быть публичным. 5. Класс Solution.Human не должен поддерживать интерфейс Externalizable.
public class Solution {
    public static void main(String[] args) {
        //исправьте outputStream/inputStream в соответствии с путем к вашему реальному файлу
        try {

            File your_file_name = File.createTempFile("123", "txt");
            OutputStream outputStream = new FileOutputStream(your_file_name);
            InputStream inputStream = new FileInputStream(your_file_name);

            Human ivanov = new Human("Ivanov", new Asset("home"), new Asset("car"));
            ivanov.save(outputStream);
            outputStream.flush();

            Human somePerson = new Human();
            somePerson.load(inputStream);
            //check here that ivanov equals to somePerson - проверьте тут, что ivanov и somePerson равны
             if (!(somePerson.equals(ivanov)))return;
             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 Human {
        public String name;
        public List<Asset> assets = new ArrayList<>();

        public Human() {
        }

        @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;
        }

        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 {
            //implement this method - реализуйте этот метод

                PrintWriter printWriter = new PrintWriter(outputStream);
                printWriter.println(name);
                if (assets.size() > 0){
                    for (Asset x : assets){
                        printWriter.println(x.getPrice());
                        printWriter.println(x.getName());
                    }
                }
                printWriter.flush();


        }

        public void load(InputStream inputStream) throws Exception {
            //implement this method - реализуйте этот метод
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            if (name !=null&&assets.size()>0){
               return;
            }else{
            name = reader.readLine();
            String name1 = reader.readLine();
            String name2 = reader.readLine();
            Human person = new Human (name,(new Asset(name1)),new Asset(name2));}

        }

    }
}
public class Asset {
    public Asset(String name) {
        this.name = name;
    }

    private String name;
    private double price;

    public String getName() {
        return name;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

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

        Asset asset = (Asset) o;

        if (Double.compare(asset.price, price) != 0) return false;
        return name != null ? name.equals(asset.name) : asset.name == null;

    }

    @Override
    public int hashCode() {
        int result;
        long temp;
        result = name != null ? name.hashCode() : 0;
        temp = Double.doubleToLongBits(price);
        result = 31 * result + (int) (temp ^ (temp >>> 32));
        return result;
    }