Clojure был разработан для поддержки платформы Java, и это одна из областей, где Clojure не предоставляет свой собственный API.Это означает, что вам, вероятно, придется погрузиться в Java, но классы, с которыми вы должны работать, совершенно пригодны для использования непосредственно из Clojure.
Единственный класс, о котором вы должны прочитать в javadocs, это java.io.File
, который представляет собой путь к файлу .
http://docs.oracle.com/javase/6/docs/api/java/io/File.html
Метод экземпляра .listFiles
возвращает массив (который можно использовать в качестве последовательности) объектов File
- один длякаждая запись в каталоге идентифицируется экземпляром File
.Существуют и другие полезные методы определения того, существует ли File
, является ли он каталогом и т. Д.
Пример
(ns my-file-utils
(:import java.io.File))
(defn my-ls [d]
(println "Files in " (.getName d))
(doseq [f (.listFiles d)]
(if (.isDirectory f)
(print "d ")
(print "- "))
(println (.getName f))))
;; Usage: (my-ls (File. "."))
Создание файловых объектов
КонструкторFile
иногда может быть немного неудобным для использования (особенно при объединении множества сегментов пути за один раз), и в этом случае Clojure предоставляет полезную вспомогательную функцию: clojure.java.io/file
.В качестве аргументов он принимает сегменты пути в виде строк или файлов.Сегменты соединяются с правильным разделителем пути платформы.
http://clojuredocs.org/clojure_core/clojure.java.io/file
Примечание: Clojure также предоставляет функцию file-seq
, которая возвращает предварительный обход (как последовательность), хотяфайловая иерархия, начинающаяся с данного файла.