Skip to content

Instantly share code, notes, and snippets.

@bpsm
Created October 6, 2010 12:38
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save bpsm/613279 to your computer and use it in GitHub Desktop.
Save bpsm/613279 to your computer and use it in GitHub Desktop.
(ns bpsmannschott
(:import java.io.File)
(:import java.io.FileNotFoundException))
(defn as-file [s]
"Return whatever we have as a java.io.File object"
(cond (instance? File s) s ; already a file, return unchanged
(string? s) (File. s) ; return java.io.File for path s
:else (throw (FileNotFoundException. (str s)))))
(defn walk [^File dir]
(let [children (.listFiles dir)
subdirs (filter #(.isDirectory %) children)
files (filter #(.isFile %) children)]
(concat files (mapcat walk subdirs))))
;; EXAMPLE
;; count the number of files in or below /tmp
;;
;; (count (walk (as-file "/tmp")))
;;
;; alternately:
;;
;; (-> "/tmp" as-file walk count)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment