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
Приведенный выше код даст следующий вывод.