CSV файл не может обновиться - PullRequest
0 голосов
/ 26 апреля 2020

Я пытаюсь создать программу, которая выставляет оценки ученику.

Сначала нужно спросить идентификатор ученика, после чего нужно поставить оценку каждому критерию для одного и того же ученика.

Этот код ничего не меняет после того, как я поставил оценки.

BufferedReader br = new BufferedReader(new FileReader("project.csv"));
while ((line = br.readLine()) != null) {
    String[] cols = line.split(",");
    System.out.println("Please choose a criteria (2-7) ?");
    int subjectToGiveMark = in .nextInt(); // for creativity is 2
    System.out.println("Please enter a mark :");
    int mark = in .nextInt(); // which mark should be given 
    final int size = cols.length;
    String[] finalResult = new String[size];
    int index = 0;

    while (index < finalResult.length) {
        if (index == subjectToGiveMark) {
            finalResult[index] = mark + "";
        } else {
            finalResult[index] = cols[index];
        }
        index++;
    }
}

Может кто-нибудь сказать мне, что с ним не так? введите описание изображения здесь

1 Ответ

0 голосов
/ 27 апреля 2020

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

Оператор try-with-resources обеспечивает закрытие каждого ресурса в конце оператора.

- Учебные руководства по Java ™

Подробнее информация: https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html

Как? Например, в том, что вы читаете, просто оберните его попыткой:

try (BufferedReader br = new BufferedReader(new FileReader("project.csv"))) {
  // The while code here...
}

Также вы изменяете переменную finalResult, но ничего не делаете с ней, так что ваши изменения просто хранится там и ничего больше, поэтому вы не видите свои изменения!

Вам нужно создать переменную вне l_1039 *, сохраняя все строки, как список. В противном случае вы можете открыть другой файл (например, project-output.csv ) и записать его во время чтения другого файла.

// Same principle as reading
try (BufferedWriter writer = new BufferedWriter(new FileWriter("project.csv"))) {
  // Write the result
}

Этот ответ более подробно затрагивает тему написания: { ссылка }

Пример чтения-записи, я полагаю Java 8:

try (BufferedWriter writer = new BufferedWriter(new FileWriter("project-output.csv"))) {
  try (BufferedReader reader = new BufferedReader(new FileReader("project.csv"))) {
    String line;
    while ((line = reader.readLine()) != null) {
        String[] cols = line.split(",");
        System.out.println("Please choose a criteria (2-7): ");
        final int subjectToGiveMark = in.nextInt(); // for creativity is 2
        System.out.println("Please enter a mark: ");
        final int mark = in.nextInt(); // which mark should be given
        cols[subjectToGiveMark] = Integer.toString(mark);
        // Here is where you write the output:
        writer.write(String.join(",", cols));
        writer.newLine();
    }
    writer.flush();
  }
}

Вы можете увидеть рабочий пример на repl.it https://repl.it/repls/ScaredSeriousCookie

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