Clojure Goodness: Reading Text File Content With slurp
The slurp
funtion in Clojure can be used to read the contents of a file and return it as a string value. We can use several types as argument for the function. For example a string argument is used as URI and if that is not valid as a file name of the file to read. A File
instance can be used directly as argument as well. But also Reader
, BufferedReader
, InputStream
, URI
, URL
, Socket
, byte[]
and char[]
. As an option we can specify the encoding used to read the file content using the :encoding
keyword. The default encoding is UTF-8 if we don’t specify the encoding option.
In the following example we use the slurp
function in different use cases. We use a file named README
with the content Clojure rocks!:
(ns mrhaki.sample.slurp
(:require [clojure.java.io :as io]
[clojure.test :refer [is]])
(:import (java.io File)))
;; slurp interperts a String value as a file name.
(is (= "Clojure rocks!" (slurp "files/README")))
;; Using the encoding option.
(is (= "Clojure rocks!" (slurp "files/README" :encoding "UTF-8")))
;; We can also use an explicit File object.
(is (= "Clojure rocks!" (slurp (io/file "files/README"))))
(is (= "Clojure rocks!" (slurp (File. "files/README"))))
;; We can also use an URL as argument.
;; For example to read from the classpath:
(is (= "Clojure rocks!" (slurp (io/resource "data/README"))))
;; Or HTTP endpoint
(is (= "Clojure rocks!" (slurp "https://www.mrhaki.com/clojure.txt")))
Written with Clojure 1.11.1.