Clojure 文件 I/O

2018-12-23 18:04 更新

Clojure在使用I / O時(shí)提供了許多輔助方法,它能幫助我們更方便的操作文件:

  • 讀取文件
  • 寫入文件
  • 查看文件是文件還是目錄

讓我們來(lái)探討Clojure提供的一些文件操作。

作為整個(gè)字符串讀取文件的內(nèi)容

如果要以文件的形式獲取文件的全部?jī)?nèi)容,可以使用clojure.core.slurp方法。 slurp命令打開文件上的讀取器并讀取其所有內(nèi)容,返回一個(gè)字符串。

(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

一次讀取一行文件的內(nèi)容

如果想要以字符串的形式獲得文件的整個(gè)內(nèi)容,一次一行,可以使用clojure.java.io/reader方法。 clojure.java.io/reader類創(chuàng)建一個(gè)閱讀器緩沖區(qū),用于讀取文件的每一行。

下面是一個(gè)示例,說(shuō)明如何做到這一點(diǎn):

(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

最終輸出結(jié)果為:

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

寫入"文件"

如果要寫入“到”文件,可以使用clojure.core.spit命令將整個(gè)字符串打入文件。 spit命令與slurp方法相反。 此方法以作者身份打開文件,寫入內(nèi)容,然后關(guān)閉文件。

下面是一個(gè)例子:

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

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

在上面的例子中,如果你查看Example.txt文件,你會(huì)看到文件內(nèi)容為"This is a string"

一次寫入一行文件

如果你想一次寫一行文件,你可以使用clojure.java.io.writer類。 clojure.java.io.writer類用于創(chuàng)建寫入器流,其中數(shù)據(jù)的字節(jié)被饋送到流中并且隨后被饋送到文件中。

以下是顯示如何使用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)

當(dāng)執(zhí)行上面的代碼時(shí),“hello world”行將出現(xiàn)在Example.txt文件中。 append:true選項(xiàng)是將數(shù)據(jù)附加到文件。 如果未指定此選項(xiàng),則每當(dāng)將數(shù)據(jù)寫入文件時(shí),文件將被覆蓋。

檢查文件是否存在

要檢查文件是否存在,可以使用clojure.java.io.file類來(lái)檢查文件是否存在。 下面是一個(gè)例子,說(shuō)明如何完成這個(gè):

(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。

從控制臺(tái)讀取

要從控制臺(tái)讀取數(shù)據(jù),可以使用read-line語(yǔ)句。 下面是一個(gè)示例,顯示如何使用。

如果在REPL窗口中輸入(read-line)命令,您將有機(jī)會(huì)在控制臺(tái)窗口中輸入一些輸入。

user->(read-line)
Hello World

以上示例將輸出以下結(jié)果:

“Hello World”

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)