Java, как написать или добавить вместо перезаписи текстового файла? - PullRequest
0 голосов
/ 11 октября 2019

Интересно, почему моя программа перезаписывает существующий текст в текстовом файле вместо добавления новой строки текста?

public class WriteToFile {

    public void registerTrainingSession(Customer customer) {

        Path outFilePath = Paths.get("C:\\Users\\Allan\\Documents\\Nackademin\\OOP\\Inlämningsuppgift2\\visits.txt");


        try (BufferedWriter save = Files.newBufferedWriter(outFilePath)) {

            String trainingSession = String.format("Member: %s %s\nPersonalnumber: %s\nTraining session date: %s\n", customer.getFirstName(),
                    customer.getLastName(), customer.getPersonalNumber(), LocalDate.now());


            save.write(trainingSession);
            save.flush();

        }
        catch (NullPointerException e) {
            JOptionPane.showMessageDialog(null, "Customer info is missing!");
        }
        catch (IOException e) {
            JOptionPane.showMessageDialog(null, "File could not be created.");
        }
    }
}

1 Ответ

2 голосов
/ 11 октября 2019

Код перезаписывает файл, потому что вы не указали OpenOption при вызове newBufferedWriter().

как javadoc говорит:

Если параметры отсутствуют, этот метод работает так, как если бы параметры CREATE, TRUNCATE_EXISTING и WRITE присутствовали. Другими словами, он открывает файл для записи, создает файл, если он не существует, или сначала усекает существующий regular-file до размера 0, если он существует.

Попробуйте:

 Files.newBufferedWriter(outFilePath, StandardOpenOption.CREATE,
                                      StandardOpenOption.APPEND,
                                      StandardOpenOption.WRITE)

Или, если файл уже существует, произойдет сбой, если его нет:

 Files.newBufferedWriter(outFilePath, StandardOpenOption.APPEND,
                                      StandardOpenOption.WRITE)

Чтобы записать новый файл,сбой, если он уже существует

 Files.newBufferedWriter(outFilePath, StandardOpenOption.CREATE_NEW,
                                      StandardOpenOption.WRITE)
...