我注意到相关函数在1.2中被标记为已弃用,但我也有这样的印象:正如所写的那样,它们有一些bug需要解决。
首先,一种不受欢迎的方式来做你想做的事情(这对我来说很好):
(require '[clojure.java.io :as io])
(with-open [w (io/writer (io/file "/path/to/file")
:append true)]
(spit w "Foo foo foo.\n"))
io/file
把绳子传给
io/writer
也行——我更喜欢用包装纸,一部分是出于个人喜好,另一部分是这样
c.j.io
不尝试将字符串视为URL(在本例中,仅通过异常退出并查找文件),这是它的首选解释。)
至于我为什么认为
clojure.contrib.io
(require '[clojure.contrib.io :as cio])
(with-bindings {#'cio/assert-not-appending (constantly true)}
(cio/append-spit "/home/windfall/scratch/SO/clj/append-test.txt" "Quux quux quux?\n"))
这不会抱怨,但也不会附加到文件中——而是替换当前内容。我还不确定到底是什么问题,但换成
clojure.java.io
应该避免。(显然,这需要进一步的调查——不推荐使用的代码仍然不应该有bug——我会努力找出原因。)