
- Clojure 教程
- Clojure - 首頁
- Clojure - 概述
- Clojure - 環境
- Clojure - 基本語法
- Clojure - REPL
- Clojure - 資料型別
- Clojure - 變數
- Clojure - 運算子
- Clojure - 迴圈
- Clojure - 條件判斷
- Clojure - 函式
- Clojure - 數字
- Clojure - 遞迴
- Clojure - 檔案I/O
- Clojure - 字串
- Clojure - 列表
- Clojure - 集合
- Clojure - 向量
- Clojure - 對映
- Clojure - 名稱空間
- Clojure - 異常處理
- Clojure - 序列
- Clojure - 正則表示式
- Clojure - 斷言
- Clojure - 解構
- Clojure - 日期與時間
- Clojure - 原子
- Clojure - 元資料
- Clojure - StructMaps
- Clojure - Agents
- Clojure - 觀察者
- Clojure - 宏
- Clojure - 引用值
- Clojure - 資料庫
- Clojure - Java 介面
- Clojure - 併發程式設計
- Clojure - 應用
- Clojure - 自動化測試
- Clojure - 庫
- Clojure 有用資源
- Clojure - 快速指南
- Clojure - 有用資源
- Clojure - 討論
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”