За занавесом: запись в файл
Запись в файл использует те же три уровня: байты OutputStream
, символы OutputStreamWriter
и строки BufferedWriter
. Для записи байт либо символов используются функции write
, аргументом которых может являться целое число (в котором хранится байт или код символа) или массив (опять-таки байт или символов). Эти функции не имеют результата и бросают IOException
, если файл недоступен для записи. BufferedWriter
может использовать функцию write
также для записи строк. Как и все три вида потоков чтения, потоки записи необходимо закрывать после использования с помощью close()
или use { … }
.
Сверх этого, для записи часто используется так называемый поток печати PrintStream
. В Котлине его можно создать из файла, используя функцию file.printStream()
. Поток печати расширяет обычный байтовый поток рядом дополнительных возможностей:
printStream.println(…)
— вывод заданной строки или строкового представления с последующим переходом на новую строку.printStream.print(…)
— то же, но без перехода на новую строку.printStream.format(formatString, …)
— форматированный вывод (происходит по принципу, описанном в разделе 6).
Упражнения
Откройте файл srс/lesson7/task1/Files.kt
в проекте KotlinAsFirst
. Он содержит ряд задач, каждая из которых предполагает наличие входного и/или выходного файла. Решите хотя бы одну-две из имеющихся задач, используя описанные в этом разделе приёмы. Обратите внимание на задачи, помеченные как “Сложная” или “Очень сложная”, попробуйте решить одну из них.
Протестируйте свою реализацию, используя тесты из test/lesson7/task1/Tests.kt
. Обратите внимание, что тесты используют готовые входные файлы, расположенные в директории input
нашего проекта. Убедитесь, что тесты успешно проходят, обязательно создайте два-три дополнительных теста. Постарайтесь внутри этих тестов проверить какие-либо необычные ситуации, которые могут возникнуть в выбранной вами задаче.