Как прочитать файл целиком
Короткий ответ
Пусть рядом с программой лежит файл notes.txt:
Buy milk
Call AnnaFiles.readString() читает его в одну строку. Методу нужен путь — объект Path:
void main() throws IOException {
String text = Files.readString(Path.of("notes.txt"));
IO.print(text);
}Результат:
Buy milk
Call AnnaМетод может выбросить IOException — проверяемое исключение, поэтому у main есть throws IOException.
Список строк
readAllLines() сразу разбивает файл на строки:
void main() throws IOException {
List<String> lines = Files.readAllLines(Path.of("notes.txt"));
IO.println(lines.size());
IO.println(lines.getFirst());
}Результат:
2
Buy milkОбработать ошибку
Если файла может не быть, перехватите исключение:
void main() {
try {
IO.println(Files.readString(Path.of("missing.txt")));
} catch (NoSuchFileException e) {
IO.println("File not found: " + e.getMessage());
} catch (IOException e) {
IO.println("Cannot read: " + e.getMessage());
}
}Результат:
File not found: missing.txtКодировка
Начиная с Java 18 по умолчанию используется UTF-8. Если файл в другой кодировке, укажите её:
void main() throws IOException {
String text = Files.readString(Path.of("notes.txt"), StandardCharsets.ISO_8859_1);
IO.println(text.length());
}Результат:
19Частая ошибка
Читать огромный файл целиком. readString() и readAllLines() загружают всё в память, и файл на несколько гигабайт вызовет OutOfMemoryError. Большие файлы читайте построчно через Files.lines(). И помните, что относительный путь считается от папки, из которой запущена программа, а не от папки с исходным кодом.
Функции из этого ответа
- Files.readString() — Читает весь текстовый файл в одну строку.
- Files.readAllLines() — Читает текстовый файл в список строк.
- Path.of() — Создаёт объект Path — путь к файлу или папке.