[解決済み] Clojure 1.3では、ファイルの読み書きをする方法
質問
clojure 1.3でのファイルの読み書きの推奨される方法を知りたいのですが。
- ファイル全体を読み込む方法
- ファイルを一行ずつ読む方法
- 新規にファイルを書き込む方法
- 既存のファイルに行を追加する方法
解決するには?
ここではテキストファイルのみで、おかしなバイナリーはないと仮定しています。
その1:ファイル全体をメモリに読み込む方法。
(slurp "/tmp/test.txt")
本当に大きなファイルである場合は、推奨されません。
その2:ファイルを一行ずつ読む方法。
(use 'clojure.java.io)
(with-open [rdr (reader "/tmp/test.txt")]
(doseq [line (line-seq rdr)]
(println line)))
は
with-open
マクロは、ボディーの最後でリーダーが閉じられるように配慮しています。リーダー機能は、文字列(URLなども可能)を
BufferedReader
.
line-seq
は遅延seqを送出します。遅延 seq の次の要素を要求すると、リーダから一行が読み込まれます。
なお、Clojure 1.7以降では、この他に トランスデューサー はテキストファイルの読み込みに使用します。
その3:新しいファイルに書き込む方法。
(use 'clojure.java.io)
(with-open [wrtr (writer "/tmp/test.txt")]
(.write wrtr "Line to be written"))
もう一度
with-open
は
BufferedWriter
は本文の最後で閉じられる。Writerは文字列を
BufferedWriter
java interopで使用することができます。
(.write wrtr "something").
また
spit
の反対です。
slurp
:
(spit "/tmp/test.txt" "Line to be written")
その4:既存のファイルに行を追加する。
(use 'clojure.java.io)
(with-open [wrtr (writer "/tmp/test.txt" :append true)]
(.write wrtr "Line to be appended"))
上記と同じですが、今度はappendオプションがあります。
あるいはまた
spit
の反対です。
slurp
:
(spit "/tmp/test.txt" "Line to be written" :append true)
PS:
他の何かではなく、File に対して読み書きしているという事実をより明確にするために、まず File オブジェクトを作成し、それを
BufferedReader
またはWriterです。
(reader (file "/tmp/test.txt"))
;; or
(writer (file "tmp/test.txt"))
ファイル関数はclojure.java.ioにもあります。
PS2です。 カレントディレクトリ(だから ".")が何であるかを確認できると便利なことがあります。絶対パスを取得するには、2つの方法があります。
(System/getProperty "user.dir")
または
(-> (java.io.File. ".") .getAbsolutePath)
関連
-
[解決済み] PowerShellでファイルのバージョンを取得する
-
[解決済み] System.ComponentModel.Win32Exception (0x80004005)。ixwebhosting [閉鎖]でアクセスが拒否されました。
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] ファイルへの追記はどのように行うのですか?
-
[解決済み] ファイルの内容からJavaの文字列を作成するにはどうすればよいですか?
-
[解決済み] サーバーを介さずに、ユーザーがダウンロードできるファイルをメモリ上に作成するにはどうすればよいですか?
-
[解決済み] Javaでファイルが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Goでファイルが存在するかどうかを確認する方法は?
-
[解決済み】<input type="file">でファイル形式を制限する?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] System.ComponentModel.Win32Exception (0x80004005): ixwebhosting [closed]でアクセスが拒否されました。
-
[解決済み] このシンプルなfile.managed saltstackの構成は、何が問題なのでしょうか?
-
[解決済み] .metaファイルとは何ですか?なぜUnityは私のすべてのアセットに対してそれを作成するのですか?
-
[解決済み] wget & curl output "No such file or directory".
-
[解決済み] バイナリファイルを比較して、同じファイルかどうかを確認する方法は?
-
[解決済み] PowerShellでファイルのバージョンを取得する
-
[解決済み] Linuxでスクリプトを使用してファイルのエンコーディングを調べるにはどうしたらいいですか?
-
[解決済み】ターミナル(bashシェル)でファイルやディレクトリを高速に削除する方法【非公開
-
[解決済み] Ant タスクで、ファイルが存在する場合のみ Ant ターゲットを実行する?
-
[解決済み] Notepad++で記録したマクロはどこに保存されていますか?