Clojureのファイル操作他.
あまり調査していないけどたぶんだいたいが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ファイル以外の実行時に使うデータ.
- https://docs.oracle.com/javase/jp/1.5.0/guide/lang/resources.html
- https://www.ne.jp/asahi/hishidama/home/tech/java/resource.html
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)))
ファイルサイズを取得
(defn get-total-bytes [file-path]
(.length (io/as-file file-path)))
文字列をファイルに書き出し
;; https://stackoverflow.com/questions/7756909/in-clojure-1-3-how-to-read-and-write-a-file
(use 'clojure.java.io)
(with-open [wrtr (writer "/tmp/test.txt")]
(.write wrtr "Line to be written"))
ファイルパスを作成するには?
clojure.string/joinよりもベターな方法.
;; https://stackoverflow.com/questions/21198361/clojure-file-system-portability
(require '[clojure.java.io :as io])
(-> home
(io/file "media" "music")
(.getPath))