clojure如何知道一个项目中文件夹/文件/目录的路径?

时间:2013-02-24 09:30:16

标签: clojure functional-programming

假设我的clojure项目中有两个文件,一个是clj,另一个是txt。 有没有办法知道clj文件中txt文件的路径(作为字符串)?

有:

(System/getProperty "user.dir") 

(-> (java.io.File. ".") .getAbsolutePath)

但是这给出了当前目录的位置。包含clj文件的那个,代码写入的文件。 但是如何知道txt文件的路径? 目的是从clj文件写入此txt文件。

谢谢。

4 个答案:

答案 0 :(得分:8)

在Java和Clojure中,您可以在CLASSPATH上找到文件。例如,在Java中,通常将诸如log4j.properties之类的东西放在CLASSPATH的顶部(例如,在classes目录中),然后您可以在Clojure(或Java)代码中引用该文件:

(java.io.File. "log4j.properties")

您是否在使用Leiningen并运行应用程序?如果是这样,您可以在顶层创建一个目录并将文件放在那里。例如,如果您有配置文件,则可以使用属性文件“conf”目录:

my-lein-proj$ ls
conf  doc  project.clj  README.md  src  target  test

假设您将myproj.conf文件放在conf目录中,并且想要在Clojure代码中读取它。然后你可以这样做:

(slurp "conf/myproj.conf")

答案 1 :(得分:3)

Clojure库local-file允许您使用local-file/project-dir获取当前项目的目录。只要你知道你想要访问的文件在你的项目中的哪个位置,你应该能够以这种方式找到它。

答案 2 :(得分:1)

  

这给出了当前clj文件的位置,即该代码所在的文件   写的。

不,它没有。 它给出了当前目录。

您是否考虑过可以运行不在当前目录中的clojure脚本?

答案 3 :(得分:0)

如果您的文件结构与此类似:

配置 |来源 |目标 |测试

你在 config 目录中有一个配置,在我们的例子中假设它的 java.config 并且你试图在 src 目录中的 core.clj 中读取这个文件你也可以使用 clojure.java.io/reader< /strong> 方法

例如:

(clojure.java.io/reader "config/java.config")

你可以在repl中运行下面的命令来查看文件的内容

(slurp (clojure.java.io/reader "config/java.config")

如果你有兴趣逐行阅读文件的内容,你可以将上面的函数与 with-open 方法结合起来逐行阅读:

(with-open [word (clojure.java.io/reader "config/java.config")]
  (loop [c (.read word)]
    (if (not= c -1)
      (do
        (print (char c))
        (recur (.read word))))))