Чтение текстового файла

Clojure:
Чтение текстового файла

Как это сделать:

;; Чтение всего файла как строки
(slurp "example.txt")

;; Вывод: "Привет, это содержимое вашего файла!"

;; Построчное чтение файла
(with-open [reader (clojure.java.io/reader "example.txt")]
  (doseq [line (line-seq reader)]
    (println line)))

;; Вывод:
;; Привет,
;; это твое
;; содержимое файла!

Подробнее

Традиционно, чтение файлов в языках программирования было многоэтапной задачей с множеством шагов для обработки ошибок и ресурсов. В Clojure вы получаете преимущество от функции slurp, изящной однострочной команды для захвата всего содержимого файла. Для построчного чтения, line-seq, в сочетании с with-open, обеспечивает эффективную и безопасную обработку файлов. Также стоит отметить, что хотя slurp удобна, она не идеальна для больших файлов из-за ограничений памяти. Вот тут-то и сияет line-seq, так как она читает файл лениво, по одной строке за раз.

Альтернативы чтению файлов в Clojure включают использование clojure.java.io/file с функциями вроде reader и конструкциями вроде with-open для ручного управления файловым дескриптором. Здесь компромисс между простотой использования (slurp) и тонким контролем в сочетании с безопасностью ресурсов (with-open и reader).

С точки зрения реализации, подход Clojure базируется на классах ввода-вывода Java, так что когда вы работаете с файлами в Clojure, вы работаете с зрелыми, хорошо протестированными библиотеками Java, обёрнутыми в функциональный идиом. Всегда обращайте внимание на ресурсы: открытые файлы потребляют дескрипторы и память, так что аккуратная работа с файлами - это хорошая привычка.

Смотрите также