1. import Java classes
2. read and print a file using with-open and doseq
We can read and print lines from a URL just like we would read from a file.
; import the necessary classes
user=> (import '(java.io BufferedReader IOException InputStreamReader PushbackReader) java.net.URL)
; define a BufferedReader
user=> (def bufferedReader
(new BufferedReader
(new InputStreamReader
(. (new URL "http://www.yahoo.com") openStream)
)
)
)
; read and print one line at a time
user=> (with-open [rdr bufferedReader]
(doseq [line (line-seq rdr)] (println line))
)
; or do it all in one shot without separately defining a bufferedReader
user=> (with-open [rdr (new BufferedReader (new InputStreamReader (. (new URL "http://www.yahoo.com") openStream)))]
(doseq [line (line-seq rdr)] (println line))
)
; do it all in one shot, using the shortcut "." instead of "new"
user=> (with-open [rdr (BufferedReader. (InputStreamReader. (. (URL. "http://www.yahoo.com") openStream)))]
(doseq [line (line-seq rdr)] (println line))
)
Pretty elegant, but a little hard for me to understand the syntax - probably due to the conditioning effect of my background in imperative programming.
Anyway ... oh, but how about reading binary files? Oh my. Need to learn that first. We'll come back to that another time.