Clojure-file-io

提供:Dev Guides
移動先:案内検索

Clojure-ファイルI/O

Clojureは、I/Oを操作するときに多くのヘルパーメソッドを提供します。 ファイルに次の機能を提供する簡単なクラスを提供します。

  • ファイルを読む
  • ファイルへの書き込み
  • ファイルがファイルかディレクトリかを確認する

Clojureが提供しているファイル操作のいくつかを見てみましょう。

ファイルの内容を文字列全体として読み取る

ファイルの内容全体を文字列として取得する場合は、 clojure.core.slurp メソッドを使用できます。 slurpコマンドは、ファイルのリーダーを開き、その内容をすべて読み取り、文字列を返します。

以下は、これを行う方法の例です。

(ns clojure.examples.hello
   (:gen-class))

;; This program displays Hello World
(defn Example []
   (def string1 (slurp "Example.txt"))
   (println string1))
(Example)

ファイルに次の行が含まれている場合、それらは次のように印刷されます-

line : Example1
line : Example2

ファイルの内容を一度に1行ずつ読み取る

ファイルの内容全体を一度に1行ずつ文字列として取得する場合は、 clojure.java.io/reader メソッドを使用できます。 clojure.java.io/readerクラスは、ファイルの各行を読み取るために使用されるリーダーバッファーを作成します。

以下は、これを行う方法を示す例です。

(ns clojure.examples.hello
   (:gen-class))

;; This program displays Hello World
(defn Example []
   (with-open [rdr (clojure.java.io/reader "Example.txt")]
   (reduce conj [] (line-seq rdr))))
(Example)

ファイルに次の行が含まれている場合、それらは次のように印刷されます-

line : Example1
line : Example2

出力は次のように表示されます-

["line : Example1" "line : Example2"]

「宛先」ファイルの書き込み

「to」ファイルを書きたい場合は、 clojure.core.spit コマンドを使用して、文字列全体をファイルに吐き出すことができます。 spitコマンドは、slurpメソッドの反対です。 このメソッドは、ファイルをライターとして開き、コンテンツを書き込んでからファイルを閉じます。

以下はその一例です。

(ns clojure.examples.hello
   (:gen-class))

;; This program displays Hello World
(defn Example []
   (spit "Example.txt"
      "This is a string"))

上記の例では、Example.txtファイルの内容が表示されている場合、「これは文字列です」の内容が表示されます。

「to」ファイルを1行ずつ書き込む

「to」ファイルを一度に1行ずつ書き込みたい場合は、 clojure.java.io.writer クラスを使用できます。 clojure.java.io.writerクラスは、データのバイトがストリームに送られ、その後ファイルに送られるライターストリームを作成するために使用されます。

以下は、spitコマンドの使用方法を示す例です。

(ns clojure.examples.hello
   (:gen-class))

;; This program displays Hello World
(defn Example []
   (with-open [w (clojure.java.io/writer "Example.txt" :append true)]
      (.write w (str "hello" "world"))))
(Example)

上記のコードを実行すると、Example.txtファイルに「hello world」という行が表示されます。 append:trueオプションは、データをファイルに追加することです。 このオプションが指定されていない場合、ファイルにデータが書き込まれるたびにファイルが上書きされます。

ファイルが存在するかどうかを確認する

ファイルが存在するかどうかを確認するには、 clojure.java.io.file クラスを使用してファイルの存在を確認できます。 以下は、これを達成する方法を示す例です。

(ns clojure.examples.hello
   (:gen-class))

;; This program displays Hello World
(defn Example []
   (println (.exists (clojure.java.io/file "Example.txt"))))
(Example)

ファイルExample.txtが存在する場合、出力はtrueになります。

コンソールからの読み取り

コンソールからデータを読み取るには、 read-line ステートメントを使用できます。 以下は、これの使用方法を示す例です。

REPLウィンドウで(読み取り行)コマンドを入力すると、コンソールウィンドウに入力を行う機会があります。

user->(read-line)
Hello World

上記のコードは次の出力を生成します。

“Hello World”