Clojure - Файловый ввод-вывод
Clojure предоставляет ряд вспомогательных методов при работе с вводом-выводом. Он предлагает более простые классы для обеспечения следующих функций для файлов.
- Чтение файлов
- Запись в файлы
- Как узнать, является ли файл файлом или каталогом
Давайте рассмотрим некоторые файловые операции, которые может предложить Clojure.
Чтение содержимого файла как целой строки
Если вы хотите получить все содержимое файла в виде строки, вы можете использовать clojure.core.slurpметод. Команда slurp открывает средство чтения файла и считывает все его содержимое, возвращая строку.
Ниже приводится пример того, как это можно сделать.
(ns clojure.examples.hello
(:gen-class))
;; This program displays Hello World
(defn Example []
(def string1 (slurp "Example.txt"))
(println string1))
(Example)
Если файл содержит следующие строки, они будут напечатаны как -
line : Example1
line : Example2
Чтение содержимого файла по одной строке за раз
Если вы хотите получить все содержимое файла в виде строки по одной строке за раз, вы можете использовать clojure.java.io/readerметод. Класс clojure.java.io/reader создает буфер чтения, который используется для чтения каждой строки файла.
Ниже приводится пример, показывающий, как это можно сделать.
(ns clojure.examples.hello
(:gen-class))
;; This program displays Hello World
(defn Example []
(with-open [rdr (clojure.java.io/reader "Example.txt")]
(reduce conj [] (line-seq rdr))))
(Example)
Если файл содержит следующие строки, они будут напечатаны как -
line : Example1
line : Example2
Результат будет показан как -
["line : Example1" "line : Example2"]
Запись в файлы
Если вы хотите писать в файлы, вы можете использовать clojure.core.spitкоманда для вывода целых строк в файлы. Команда spit противоположна методу slurp. Этот метод открывает файл как средство записи, записывает содержимое, а затем закрывает файл.
Ниже приводится пример.
(ns clojure.examples.hello
(:gen-class))
;; This program displays Hello World
(defn Example []
(spit "Example.txt"
"This is a string"))
В приведенном выше примере, если вы видите содержимое файла Example.txt, вы увидите содержимое «Это строка».
Запись в файлы по одной строке за раз
Если вы хотите записывать файлы «в» по одной строке за раз, вы можете использовать clojure.java.io.writerкласс. Класс clojure.java.io.writer используется для создания потока записи, в котором байты данных передаются в поток, а затем в файл.
Ниже приведен пример, показывающий, как можно использовать команду spit.
(ns clojure.examples.hello
(:gen-class))
;; This program displays Hello World
(defn Example []
(with-open [w (clojure.java.io/writer "Example.txt" :append true)]
(.write w (str "hello" "world"))))
(Example)
Когда приведенный выше код будет выполнен, в файле Example.txt будет строка «hello world». Параметр append: true предназначен для добавления данных в файл. Если этот параметр не указан, файл будет перезаписываться каждый раз при записи данных в файл.
Проверка, существует ли файл
Чтобы проверить, существует ли файл, clojure.java.io.fileclass можно использовать для проверки существования файла. Ниже приводится пример, показывающий, как этого можно достичь.
(ns clojure.examples.hello
(:gen-class))
;; This program displays Hello World
(defn Example []
(println (.exists (clojure.java.io/file "Example.txt"))))
(Example)
Если файл Example.txt существует, вывод будет истинным.
Чтение из консоли
Для чтения данных с консоли read-lineзаявление можно использовать. Ниже приведен пример, показывающий, как это можно использовать.
Если вы введете команду (read-line) в окне REPL, у вас будет возможность ввести некоторые данные в окне консоли.
user->(read-line)
Hello World
Приведенный выше код даст следующий результат.
“Hello World”