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

Собственно проблема. При втором вызове метода load reader уже читает null'ы, в чем проблема?

/* Читаем и пишем в файл: Human
Реализуйте логику записи в файл и чтения из файла для класса Human
Поле name в классе Human не может быть пустым
В файле your_file_name.tmp может быть несколько объектов Human
Метод 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);
            your_file_name = new File("1.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"));
            Human petrov = new Human("petrov", new Asset("guitar"));
            Human sidorov = new Human("sidorov", new Asset("wife"));
            ivanov.save(outputStream);
            petrov.save(outputStream);
            sidorov.save(outputStream);
            outputStream.flush();

            Human somePerson = new Human();
            Human somePerson1 = new Human();
            Human somePerson2 = new Human();
            somePerson.load(inputStream);
            somePerson1.load(inputStream);
            somePerson2.load(inputStream);
            //check here that ivanov equals to somePerson - проверьте тут, что ivanov и somePerson равны
            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() {
        }

        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 {
            PrintWriter writer = new PrintWriter(outputStream);
            writer.println(name);
            if (!assets.isEmpty()) {
                writer.println(true);
                writer.println(assets.size());
                for (Asset asset : assets) {
                    writer.println(asset.getName());
                    writer.println(asset.getPrice());
                }
            } else {
                writer.println(false);
            }
            writer.flush();
        }

        public void load(InputStream inputStream) throws Exception {
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            name = reader.readLine();
            if (reader.readLine().equals("true")) {
                int count = Integer.parseInt(reader.readLine());
                for(int i = 0; i < count; i ++) {
                    Asset asset = new Asset(reader.readLine());
                    asset.setPrice(Double.parseDouble(reader.readLine()));
                    assets.add(asset);
                }
            }
        }
    }
}

3 комментария

ss-20
1. не реализован пункт условия
Поле name в классе Human не может быть пустым
2. не использовал count — кол-во Asset
3. не устанавливал
asset.setPrice(Double.parseDouble(reader.readLine()));
Valdis003
Спасибо, но как это относится к моей проблеме?
AlexAV
Попробуйте закрыть в функах reader и writer
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.