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"]

'から'ファイルへの書き込み

'を'ファイルに書き込みたい場合は、 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ファイルの内容を見ると、「これは文字列です」の内容が表示されます。

'を'ファイルに一度に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ファイルに「helloworld」という行が表示されます。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ウィンドウで(read-line)コマンドを入力すると、コンソールウィンドウに入力を入力する機会があります。

user->(read-line)
Hello World

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

“Hello World”