Encodera

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

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

Как прочитать файл целиком

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

Пусть рядом с программой лежит файл notes.txt:

Buy milk
Call Anna

Files.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 — путь к файлу или папке.

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

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