Не получается выписать нужные данные из всех объектов одного класса в текстовый документ

291
15 января 2018, 08:43

При воспроизведению программы создается текстовый файл, в котором записываются сначала все данные о объектах. После чего при нажатии на кнопку данные из AnimalState должны записываться еще раз отдельно, так как они не постоянные и должны будут меняться в ходе работы программы. Но получается так что первый объект игнорируется и записываются данные только о последнем добавленном объекте. Подскажите пожалуйста как можно сделать так чтоб данные класса AnimalState записывались в файл о всех объектах?

Главный класс:

import java.util.*;
import java.io.*;
import javafx.application.Application;
import javafx.scene.image.Image;
import javafx.stage.Stage;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.input.MouseEvent;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.BorderPane;
import javafx.geometry.Insets;

public class Save extends Application{

public void start( Stage stage ) {
    stage.getIcons().add(new Image("Globe.png"));
    stage.setTitle("");
    Animal cat = new Animal();
    Animal dog = new Animal();
    GridPane gridPane = new GridPane();
    gridPane.setPadding( new Insets(65, 65, 65  , 65) );
    gridPane.setVgap(10);    // gap between cells
    gridPane.setHgap(10);    // gap between cells
    Button button = new Button( "Step" );
    GridPane.setConstraints( button, 0, 1 );
    gridPane.getChildren().add(new Label("Press:"));
    gridPane.getChildren().add( button );

    button.setOnAction( new EventHandler<ActionEvent>() {
        @Override 
        public void handle( ActionEvent e ) {
            AnimalState.stateAnimal();
        }
    });
    button.addEventHandler( MouseEvent.MOUSE_ENTERED,
        new EventHandler<MouseEvent>() {
          @Override
          public void handle(MouseEvent e) {
          }
    });
    ScrollPane scrollPane = new ScrollPane();
    scrollPane.setContent( gridPane );
        stage.setScene( new Scene( new BorderPane( scrollPane, null, null, null, 
null ) ) );
        stage.show();
    }
    public static void main( String[] args ) { 
        launch( args );
    }
}

Класс Animal

public  class Animal
{
public static  String NAME = "Cat";
public int ID = hashCode();
public static  int ADULT_WEIGHT = 10;
public static  float FOOD_QUANTITY_REQUIRED_PER_HOUR = 2; 
public static  int MAX_STARVING_HOURS_BEFORE_DEATH = 24 ; 
public static  int hoursSinceLastMeal = 3;
public static  int energyPercent = 87;
public static  int MAX_ENERGY_PERCENT = 120; 
public static  int STANDARD_SPEED = 2;
public static  int MAX_SPEED = 10;  
public static  int MAX_STAMINA = 23; 
public static  int AVERAGE_SCION_COUNT_IN_LITTER = 3;
public static  int MAX_SCION_COUNT_IN_LITTER = 6;
public static  int MAX_AGE = 15; 
public static  int MIN_BREEDING_AGE = 3;
public static  int MAX_BREEDING_AGE = 12;
public static  int MAX_AGE_IN_NEST = 1;
public static  int MIN_SELF_GOVERNMENT_AGE = 3;
public static  int age = 17;
public static  String GENDER = "male";
public static  boolean isProliferating = false;
public static  boolean isFeedingNewborns = true;
public static  String TIME_OF_BIRTH = "1999.03.08";
public static  String TIME_OF_DEATH;
public static  int weight = 3;
public static  float ENERGETIC_EFFICIENCY_PER_KILO = 3;

public int getId() {
    return hashCode();
}
public Animal() {
    new AnimalSpecification( NAME, ID, ADULT_WEIGHT, 
FOOD_QUANTITY_REQUIRED_PER_HOUR, MAX_STARVING_HOURS_BEFORE_DEATH, 
MAX_ENERGY_PERCENT, STANDARD_SPEED, MAX_SPEED, MAX_STAMINA, 
AVERAGE_SCION_COUNT_IN_LITTER, MAX_SCION_COUNT_IN_LITTER, MAX_AGE, 
MIN_BREEDING_AGE, MAX_BREEDING_AGE, MAX_AGE_IN_NEST, 
MIN_SELF_GOVERNMENT_AGE, GENDER, TIME_OF_BIRTH, TIME_OF_DEATH, 
ENERGETIC_EFFICIENCY_PER_KILO);
    new AnimalState( ID, hoursSinceLastMeal, energyPercent, age, 
isProliferating, isFeedingNewborns, weight, NAME );
}
}

Класс AnimalState:

import java.util.*;
import java.io.*;
import java.io.FileNotFoundException;
public class AnimalState {
private static final String FILENAME = "contacts.txt";
public String str;
private static int i = 1;
public static int ID;
public static int hoursSinceLastMeal;
public static int energyPercent; 
public static int age; 
public static boolean isProliferating; 
public static boolean isFeedingNewborns;
public static int weight;
public static String NAME;
public AnimalState( int ID, int hoursSinceLastMeal, int energyPercent, int age, boolean isProliferating, boolean isFeedingNewborns, int weight, String NAME){
    this.ID = ID;
    this.hoursSinceLastMeal = hoursSinceLastMeal;
    this.energyPercent = energyPercent;
    this.age = age;
    this.isProliferating = isProliferating;
    this.isFeedingNewborns = isFeedingNewborns;
    this.weight = weight;
    this.NAME = NAME;
    String.format("%s %s %s %s %s %s %s", ID, hoursSinceLastMeal, energyPercent, age, isProliferating, isFeedingNewborns, weight, NAME);
    BufferedWriter bw = null;
    FileWriter fw = null;

    try {
        fw = new FileWriter(FILENAME, true);
        bw = new BufferedWriter(fw);
        bw.write(NAME + "Log:\n");
        bw.write("Hours Since Last Meal - " + hoursSinceLastMeal + "\n");
        bw.write("Enery Percent - " + energyPercent + "\n");
        bw.write("Age - " + age + "\n");
        bw.write("Proliferating - " + isProliferating + "\n");
        bw.write("Feeding Newborns - " + isFeedingNewborns + "\n");
        bw.write("Weight - " + weight + "\n");
        bw.write("________________________________________________\n\n");
    }
    catch(IOException ex){
        ex.printStackTrace();
    }finally {
        try {
            if (bw != null)
                bw.close();
            if (fw != null)
                fw.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}
public static void stateAnimal(){
    BufferedWriter bw = null;
    FileWriter fw = null;
    try {
        String str2 = String.valueOf(isProliferating);
        String str3 = String.valueOf(isFeedingNewborns);
        fw = new FileWriter(FILENAME, true);
        bw = new BufferedWriter(fw);
        bw.write("Step №" + i + "\n");
        bw.write( "ID = " + ID + ": " );
        bw.write( hoursSinceLastMeal + ", " );
        bw.write( energyPercent + ", " );
        bw.write( age + ", " );
        bw.write( str2 + ", " );
        bw.write( str3 + ", " );
        bw.write( weight + "\n");
        bw.write("-------------------------------------\n\n");
        ++i;
    }
    catch(IOException ex){
        ex.printStackTrace();
    }finally {
        try {
            if (bw != null)
                bw.close();
            if (fw != null)
                fw.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}
}
Answer 1

Используй метод append()

bw.append("Step №" + i + "\n");
            bw.append("ID = " + ID + ": ");
            bw.append(hoursSinceLastMeal + ", ");
            bw.append(energyPercent + ", ");
            bw.append(age + ", ");
            bw.append(str2 + ", ");
            bw.append(str3 + ", ");
            bw.append(weight + "\n");
            bw.append("-------------------------------------\n\n");
READ ALSO
java.util.InputMismatchException и как с ним бороться

java.util.InputMismatchException и как с ним бороться

Доброго времени сутокРешаю задачу, нужно ввести с клавиатуры 2 числа, одно типа int, второе с плавающей точкой, т

219
Требуется оптимизация RxJava кода

Требуется оптимизация RxJava кода

RxJava начал изучать недавноНо в принципе понял как все работает

301
Почему не умирает поток в java?

Почему не умирает поток в java?

Добрый деньРазбираю код из книжки (чат клиент)

266