📅  最后修改于: 2023-12-03 14:59:56.744000             🧑  作者: Mango
Clojure 是一种适用于 JVM 平台的函数式编程语言。
Clojure 提供了许多用于文件 I/O 的操作函数,让程序员可以方便地读取和写入文件。
要读取文件,可以使用 slurp
函数,它会将文件中的内容全部读取到一个字符串中。
(let [filename "example.txt"
contents (slurp filename)]
(println contents))
在上面的示例中,slurp
函数将文件 example.txt
中的内容读取到变量 contents
中,并将其打印到控制台上。
如果你想要一行一行地读取文件,可以使用 line-seq
函数,它会返回一个懒序列,使你可以一次读取一行。
(defn read-lines [filename]
(with-open [rdr (clojure.java.io/reader filename)]
(doseq [line (line-seq rdr)]
(println line))))
在上面的示例中,read-lines
函数会打开文件 filename
并一行一行地读取文件。doseq
函数会遍历每个行,将其打印到控制台上。
要将字符串写入文件,可以使用 spit
函数。
(let [filename "output.txt"
contents "Hello, world!"]
(spit filename contents))
在上面的示例中,spit
函数将字符串 “Hello, world!” 写入到文件 output.txt
中。
如果你想要一行一行地将内容写入文件,则可以使用 line-seq
。
(defn write-lines [filename lines]
(with-open [wrt (clojure.java.io/writer filename)]
(doseq [line lines]
(.write wrt (str line "\n")))))
在上面的示例中,write-lines
函数会将变量 lines
中的每一行写入到文件中,并在每一行结尾添加换行符。
下面是一个示例程序,它会读取一个文件中的每一行,并将其中的英文单词全部转换为小写字母后写入到另一个文件中。
(ns example.core
(:require [clojure.string :as str]))
(defn lower-case-words [line]
(->> line
(str/split #"\W+")
(map str/lower-case)
(apply str)))
(defn process-file [input-file output-file]
(with-open [input (clojure.java.io/reader input-file)
output (clojure.java.io/writer output-file)]
(doseq [line (line-seq input)]
(.write output (lower-case-words line))
(.write output "\n"))))
(process-file "input.txt" "output.txt")
在上面的示例程序中,lower-case-words
函数会将一个字符串中的英文单词全部转换为小写字母。process-file
函数则会打开输入和输出文件,读取每一行并将其处理后写入到输出文件中。