Clojure - 檔案I/O



在處理I/O時,Clojure提供了一些輔助方法。它提供更簡單的類來為檔案提供以下功能。

  • 讀取檔案
  • 寫入檔案
  • 檢視檔案是檔案還是目錄

讓我們探索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

逐行讀取檔案內容

如果要逐行將檔案的全部內容作為字串獲取,可以使用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檔案的內容,您將看到“This is a string”的內容。

逐行寫入檔案

如果要逐行寫入檔案,可以使用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)

執行上述程式碼後,"hello world"行將出現在Example.txt檔案中。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”
廣告