如何在Clojure中读取文件并在命令行打印内容?现有代码仅统计行数
解决Clojure打印文件内容到命令行的问题
没问题,我来帮你调整这段Clojure代码,让它能在命令行打印文件里的内容,同时还能按需保留行数统计的功能。
基础版:仅打印文件内容
原来的代码用count (line-seq rdr)把行序列转换成了行数数值,自然没法输出内容。我们可以用doseq遍历每一行并打印:
(defn print-file [file] (with-open [rdr (clojure.java.io/reader file)] (doseq [line (line-seq rdr)] (println line)))) (print-file "D:/clojurefile/t2/ct.txt")
with-open依然保留,它会自动关闭文件阅读器,避免资源泄漏,这是Clojure处理IO的最佳实践。line-seq rdr生成文件行的惰性序列,doseq逐个遍历这些行,println把每一行输出到命令行。
进阶版:打印内容+统计行数
如果还需要同时统计总行数,可以先把行序列保存下来,再完成打印和计数:
(defn print-and-count-lines [file] (with-open [rdr (clojure.java.io/reader file)] (let [lines (line-seq rdr)] (doseq [line lines] (println line)) (println "\nTotal lines in file:" (count lines))))) (print-and-count-lines "D:/clojurefile/t2/ct.txt")
这里先把所有行存入lines变量(惰性序列在with-open内部处理是安全的,因为关闭阅读器前已经完成了遍历),先打印每行内容,最后输出总行数。
内容的提问来源于stack exchange,提问作者jayk
相关产品推荐
相关产品推荐

