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”