On Aug 31, 4:44 pm, wangzx <wangzaixi...@gmail.com> wrote:

> Is there other APIs like the Sequence but provide stream-like API?

You can try this, which I've used on short files recently:


(defn #^Class class-identity [#^Class c] c)
(defn #^java.io.BufferedReader reader-from-classpath [#^String s]
  (-> (. (class-identity java.lang.String) getResourceAsStream s)
      (java.io.InputStreamReader.)
      (java.io.BufferedReader.)))

;;perhaps this is the function you are looking for?
(defn buf2seq [#^java.io.BufferedReader b]
  (lazy-seq
    (if-let [l (.readLine b)]
      (cons l (buf2seq b)))))

(defmacro with-open-stream [bindings body]
  (let [varname (bindings 0)
        resource (bindings 1)]
    `(let [s# (reader-from-classpath ~resource)
           ~varname (buf2seq s#)]
       (try ~body
            (finally (if-not (nil? s#)
                       (try (.close s#))))))))

(def prop-map
     (with-open-stream [s "/resources/myresource.properties"]
       (into {} (map #(into [] (.split #^String % "=")) s))))

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to