Ввод-вывод и файловая система

Карта

Как выбрать API

ДанныеAPI
изображение, архив, протоколbyte streams
текст известной кодировкиreader/writer
маленький текстовый файлFiles.readString/writeString
большой файлbuffered stream/reader
обход каталогаFiles.list, walk, walkFileTree

Общие правила контракта

  1. Явно определить владельца ресурса: кто открыл, тот обычно закрывает.
  2. Использовать try-with-resources.
  3. Не рассчитывать, что один read заполнит buffer.
  4. Зафиксировать charset на byte/char границе.
  5. Для больших данных не использовать readAllBytes/readAllLines без лимита.
  6. Разделять EOF, timeout, отмену и I/O-ошибку.

На собеседовании

  • Почему read() возвращает int? Нужно отдельное значение -1 для EOF.
  • Где появляется кодировка? При преобразовании байтов и символов.
  • Что закрывает try-with-resources при двух ресурсах? Оба, в обратном порядке объявления.
  • Path гарантирует существование? Нет.