📝Clojure: File I/O

📝Clojure: File I/O

Clojureのファイル操作他.

up: 📂Clojure Core Languages

あまり調査していないけどたぶんだいたいがJavaのClojureラッパーだと思う. ということは困ったらJavaを調べれば良い. ただJavaは Java7以降のnioとそれ以前があり少しややこしい(JavaとFile周りは 苦労 したので詳しい).

clojure.core #

slurp #

引数で与えられたファイルを読み込んで文字列を返す.

with-open #

clojure.java.io #

clojure.java.io/file #

java.io.Fileオブジェクトを作成する.

(require '[clojure.java.io :as io])

(io/file "config.edn")
;; => #object[java.io.File 0x71fda6e1 "config.edn"]

(io/resource "config.edn")
;; => #object[java.net.URL 0x7f3b3463 "file:/home/tsu-nera/hogehoge/resources/config.edn"]
  • io/fileでJavaのFileオブジェクトを扱う.
  • io/resourceで resource-pathにあるFileオブジェクトを扱う.

メモ, これはJava7で導入された java.nio.fileとは違うことに注意. 昔Javaのファイル周りはけっこう調べて業務的に詳しかったことを思い出した.

clojure.java.io/resource #

https://clojuredocs.org/clojure.java.io/resource

ここでいうresourceとは, Javaの仕組みの1つ. Javaリソースとはクラスパスにある.classファイル以外の実行時に使うデータ.


clojureのresourceに関する情報は漁ってもみつからないのだが, deps.ednだと :pathsに含まれる.classファイル以外ならいいのか?

clojure.java.io/reader, clojure.java.io/writer #

java.io.BufferedReader/BufferedWriterを扱う.

clojure.java.io/input-stream, clojure.java.io/output-stream #

java.io.BufferedInputStream/BufferedOutputStreamを扱う.

Clojure File操作 Howto #

ネット上の画像をURIを指定してダウンロードしたい #

 (defn copy [uri file]
  (with-open [in (io/input-stream uri)
              out (io/output-stream file)]
    (io/copy in out)))

ref. In Clojure, how do you download an image from the web and save it to your file system? - Stack Overflow

ファイルサイズを取得 #

(defn get-total-bytes [file-path]
  (.length (io/as-file file-path)))

References #


Tags