Чтение/запись объектов в текстовый файл

298
25 октября 2017, 03:34

Никак не соображу как записать/считать с текстового файла. В Интернете есть только примеры только с одним объектом. А если такая ситуация как у меня? Мое задание: в программу включить возможность записи данных классов в текстовый файл на диске и чтения их из текстового файла в программу. Огромное спасибо!

Как прочитать/записать в файл такого вида:

1 Abara 100 true

2 Lilu 100 true

...

Код моей программы:

Zoopark.java:

public class Zoopark {
    public static void main(String[] args) {
        Bassein V1 = new Bassein(2);
        Waterfowl B = new Waterfowl("Vala", 100, true);
        V1.putAnimal(B);
        Waterfowl C = new Waterfowl("Lilu", 100, true);
        V1.putAnimal(C);
        Bird D = new Bird("Abara", 100, true);
        V1.putAnimal(D);
        OpenCage V2 = new OpenCage(4);
        Ungulates E = new Ungulates("Kala", 1000, true);
        V2.putAnimal(E);        
        Ungulates I = new Ungulates("Nala", 1000, true);
        V2.putAnimal(I);
        Ungulates F = new Ungulates("Mala", 1000, true);
        V2.putAnimal(F);
        Ungulates U = new Ungulates("Ala", 1000, true);
        V2.putAnimal(U);
    }
}

Animals.java:

abstract public class Animals {
    private String name;
    private int weight;
    // is this boy?
    private boolean isMale;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return weight;
    }
    public void setAge(int age) {
        this.weight = weight;
    }
    public boolean isMale() {
        return isMale;
    }
    public void setMale(boolean isMale) {
        this.isMale = isMale;
    }
    public Animals(String name, int weight, boolean isMale) {
        this.name = name;
        this.weight = weight;
        this.isMale = isMale;
    }
}

Bassein.java

public class Bassein extends Valers {
    Bassein(int maxAnimal) {
    super(maxAnimal);
    }
    public void putAnimal(Waterfowl a) {        
    super.putAnimal(a);
    }
    public void putAnimal(Animals a) {      
    //super.putAnimal(a);
    System.out.println("Не тот вид животного");
    } 
}

OpenCage.java

public class OpenCage extends Valers {
    OpenCage(int maxAnimal) {
    super(maxAnimal);
    }
    public void putAnimal(Ungulates a) {        
    super.putAnimal(a);
    }
    public void putAnimal(Animals a) {      
    //super.putAnimal(a);
    System.out.println("Не тот вид животного");
    } 
}

Valers.java

  import java.util.ArrayList;
    import java.util.List;
    public class Valers {
    private int CageLimit;
    List<Animals> result = new ArrayList<Animals>();
    Valers(int maxAnimal) {
        this.CageLimit = maxAnimal;
    }
    public void putAnimal(Animals a) {
        int numAnimals=result.size();
        if (numAnimals>=CageLimit) { 
           System.out.println("Вольер уже полный");
           System.out.println(" ");
        }
        else {
           this.result.add(a);
           System.out.println("Животное добавлено в вольер");
           System.out.println("  ");
        }
    }
    public int getCageAnimals() {
        return result.size();
    }
}

Ungulates.java

public class Ungulates extends Animals {
    public Ungulates(String name, int weight, boolean isMale) {
        super(name, weight, isMale);
        System.out.println(name + " " + weight + " " + isMale);
    }
}

Waterfowl.java

public class Waterfowl extends Animals {
    public Waterfowl(String name, int weight, boolean isMale) {
        super(name, weight, isMale);
        System.out.println(name + " " + weight + " " + isMale);
    }
}
Answer 1

Создайте внутри классов методы save и load

  public void save(OutputStrem out){
      //в удобном вам порядке записываете свой объект
  }

  public Object load (InputStream in){
     //читаете в том же порядке, что и записывали
  }

Либо можете использовать интерфейс serializable и используя ObjectOutputStream писать сразу объект, ObjectInputStream читать объект.

Так же можно использовать xml и json парсеры.

Замечу только, что вариант с serializable не даст вам читаемый для человека файл, остальные вполне читаемы.

В вашем случае вы можете создать методы сохранения загрузки у каждой сущности, а в объектах "бассейн" и "зоопарк" пройтись по всем сущностям и сохранить/загрузить их.

Полезная статья на хабре https://m.habrahabr.ru/post/60317/

READ ALSO
Взаимосвязь Thread и UI андроид [требует правки]

Взаимосвязь Thread и UI андроид [требует правки]

Вопрос как наладить взаимосвязь Thread и Activity если Thread не является внутренним классом Activity?

270
Реализация перемещения маркера

Реализация перемещения маркера

Всем привет! Как можно переместить маркер на карте Google Maps с анимацией?

246