Как дописать текст в конец файла
Короткий ответ
Передайте опции 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() — Записывает строку в файл: создаёт его или перезаписывает.