假设我的clojure项目中有两个文件,一个是clj,另一个是txt。 有没有办法知道clj文件中txt文件的路径(作为字符串)?
有:
(System/getProperty "user.dir")
或
(-> (java.io.File. ".") .getAbsolutePath)
但是这给出了当前目录的位置。包含clj文件的那个,代码写入的文件。 但是如何知道txt文件的路径? 目的是从clj文件写入此txt文件。
谢谢。
答案 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))))))