Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как дописать текст в конец файла

Короткий ответ

Передайте опции CREATE и APPEND — файл будет создан, если его нет, а новый текст добавится в конец:

void main() throws IOException {
    Path log = Path.of("app.log");
    Files.writeString(log, "first\n", StandardOpenOption.CREATE, StandardOpenOption.APPEND);
    Files.writeString(log, "second\n", StandardOpenOption.CREATE, StandardOpenOption.APPEND);
 
    IO.print(Files.readString(log));
}

Результат:

first
second

Журнал с временем

Удобно вынести запись в метод:

void log(String message) throws IOException {
    String line = LocalTime.of(12, 0, 5) + " " + message + System.lineSeparator();
    Files.writeString(Path.of("events.log"), line, StandardOpenOption.CREATE, StandardOpenOption.APPEND);
}
 
void main() throws IOException {
    log("user logged in");
    log("order created");
    IO.print(Files.readString(Path.of("events.log")));
}

Результат:

12:00:05 user logged in
12:00:05 order created

Здесь время зафиксировано для примера — в реальном коде используйте LocalTime.now().

Через BufferedWriter

Те же опции принимает newBufferedWriter():

void main() throws IOException {
    Path file = Path.of("list.txt");
    for (String item : List.of("tea", "cake")) {
        try (var writer = Files.newBufferedWriter(file, StandardOpenOption.CREATE, StandardOpenOption.APPEND)) {
            writer.write(item);
            writer.newLine();
        }
    }
    IO.print(Files.readString(file));
}

Результат:

tea
cake

Частая ошибка

Указать только APPEND. Если файла ещё нет, запись падает:

void main() throws IOException {
    Files.writeString(Path.of("new.log"), "text", StandardOpenOption.APPEND);
}

Результат:

Exception in thread "main" java.nio.file.NoSuchFileException: new.log

Функции из этого ответа

  • Files.writeString() — Записывает строку в файл: создаёт его или перезаписывает.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.