Учебники

Clojure — File I / O

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.file можно использовать для проверки существования файла. Ниже приведен пример, который показывает, как это можно сделать.

(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

Приведенный выше код даст следующий вывод.