Java Чтение / Запись Файла - PullRequest
       6

Java Чтение / Запись Файла

0 голосов
/ 09 октября 2018

У меня есть задача сделать симулятор экзамена.Что я имею в виду, ученик вводит свое имя, фамилию и рождение после того, как учитель вводит свои оценки по некоторым предметам, а затем он решает, сдал ли ученик предмет или нет.Итак, у меня есть вопрос, как записать в файл текст с новой строкой и читать с перезаписью этого файла (читать построчно и переписывать).Например: я добавляю такой текст в файл Jimmy Kordon 05.10.1998, как создать новую строку для этого, я имею в виду после 1998, а затем добавляю еще один штрих.И это должно выглядеть так:

Jimmy Kordon 05.10.1998
Alex Starr 12.09.2000

После этого я вызываю другой метод, который переписывают в этот

Jimmy Kordon 05.10.1998 200.0 yes
Alex Starr 12.09.2000 10.0 no

Вот как я это сделал.У меня есть проблема причина после переписывания у меня нет новой строки, и если добавить нового человека, этот метод просто удалить старую информацию, а затем добавить новую.В чем проблема?Пожалуйста, помогите мне.

Это метод для добавления информации учеником (этот метод имеет класс ученика).

public void write() throws IOException {
    Scanner in = new Scanner(System.in);
    System.out.println("Input name");
    String name = in.nextLine();
    setName(name);

    System.out.println("Input last name");
    String lastName = in.nextLine();
    setLastName(lastName);

    System.out.println("Input birthday");
    String birth = in.nextLine();
    setBirth(birth);

    String ex = getName() + " " + getLastName() + " " + getBirth();

    BufferedWriter writer = new BufferedWriter(new FileWriter("test.txt"));
    try {
        writer.write(getName() + " " + getLastName() + " " + getBirth());
        writer.newLine();
        //writer.close();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        writer.close();
    }
}

И этот метод я вызываю из класса учителя, чтобы переписать эту информацию:

private void inputMarks() {
    Scanner in = new Scanner(System.in);

    System.out.println("Input Math mark");
    emM = new ExamMarks();
    emM.setMath(in.nextDouble());

    System.out.println("Input Physics mark");
    emP = new ExamMarks();
    emP.setPhysics(in.nextDouble());

    System.out.println("Input Ukrainian mark");
    emU = new ExamMarks();
    emU.setUkrainian(in.nextDouble());

    System.out.println("Input English mark");
    emE = new ExamMarks();
    emE.setEnglish(in.nextDouble());

}

private double Arithm(double Math, double Physics, double Ukrainian, double English) {
    double sum = Math + Physics + Ukrainian + English;
    double average = sum / 4.0;
    return average;
}

public void rewrite() {
    inputMarks();

    String a = read();

    System.out.println(Arithm(emM.getMath(), emP.getPhysics(), emU.getUkrainian(), emE.getEnglish()));

    Scanner in = new Scanner(System.in);
    System.out.println("Input yes/no");
    String YesNo = in.nextLine();

    try(BufferedWriter writer = new BufferedWriter(new FileWriter("test.txt"))) {
        writer.write(a + " " + Arithm(emM.getMath(), emP.getPhysics(), emU.getUkrainian(), emE.getEnglish())
                + " " + YesNo);
        writer.newLine();
        writer.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

1 Ответ

0 голосов
/ 09 октября 2018

Измените код

try(BufferedWriter writer = new BufferedWriter(new FileWriter("test.txt")))

на

try(BufferedWriter writer = new BufferedWriter(new FileWriter("test.txt", true)))

Это позволит включить режим добавления вместо переопределения старых данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...