在Clojure中,我不想提供路径,而是想对文件的内容使用字符串

在Clojure中,我不想提供路径,而是想对文件的内容使用字符串,clojure,io,Clojure,Io,我目前正在编写一个restful API,需要以字符串形式接收整个文件。 我没有编写解析这些文件的实际函数,必须以某种方式将这些字符串输入到除路径之外的函数中 因此,我想找到/构建一个函数来解决这个问题: (slurp (INSERT-MAGIC-HERE "The content of my file.")) 编辑: 虽然这两个答案似乎都有效,但我发现最可靠的方法是使用char数组。这可以防止我经常遇到的关于关闭流的任何错误。如果确实需要写入文件系统,一种简便的方法是使用java.io.fi

我目前正在编写一个restful API,需要以字符串形式接收整个文件。 我没有编写解析这些文件的实际函数,必须以某种方式将这些字符串输入到除路径之外的函数中

因此,我想找到/构建一个函数来解决这个问题:

(slurp (INSERT-MAGIC-HERE "The content of my file."))
编辑:


虽然这两个答案似乎都有效,但我发现最可靠的方法是使用char数组。这可以防止我经常遇到的关于关闭流的任何错误。

如果确实需要写入文件系统,一种简便的方法是使用java.io.file/createTempFile。看

另一个更简单的选择来自。它就是为了这个目的而建造的:

(ns tst.demo.core
  (:use demo.core tupelo.core tupelo.test)
  (:require
    [tupelo.core :as t]
    [tupelo.string :as ts] )) 

(dotest
  (is= "Hello World!"
    (slurp
      (ts/string->stream "Hello World!"))) )
将以下内容添加到project.clj文件中:

slurp使用一种非常灵活的机制来理解它的输入参数:它当然不会坚持它们是一个文件。例如,它将接受java.io.Reader。从字符串构建读取器很容易,只需构建一个StringReader。所以

(slurp (java.io.StringReader. "The content of my file."))

请注意,如果您的服务运行很长时间或收到大量请求,则可能不建议创建临时文件,因为您可以达到打开文件数量的限制,或者填充磁盘,因为临时文件需要使用deleteOnExit注册以删除,并且只有在JVM退出时才会删除。如果需要调用需要文件的API,我建议在完成API调用后手动删除这些文件。
(slurp (java.io.StringReader. "The content of my file."))