为什么我的 Clojure 类路径中的任何文件夹都不被视为目录,为什么没有文件存在



下面是我从REPL(在Light Table中)运行的代码,我目前对此感到困惑。

这似乎工作正常:

(require '[clojure.java.classpath :as classpath])
(import '[java.io File])
(map #(File. (.toURI %))
  (classpath/classpath))

结果:

(#<File C:Documents%20and%20SettingsKennyMy%20Documentshello-heroku-clojure-worldtest>
 #<File C:Documents%20and%20SettingsKennyMy%20Documentshello-heroku-clojure-worldsrc>
 #<File C:Documents%20and%20SettingsKennyMy%20Documentshello-heroku-clojure-worlddev-resources>
 #<File C:Documents%20and%20SettingsKennyMy%20Documentshello-heroku-clojure-worldresources>
 #<File C:Documents%20and%20SettingsKennyMy%20Documentshello-heroku-clojure-worldtargetclasses>
...

但是,以下内容似乎表明没有一个文件是目录:

(filter #(.isDirectory (File. (.toURI %)))
  (classpath/classpath))

结果:

()

编辑 - 我很确定以下是我感到困惑的代码的更简单版本; 它产生相同的结果:

(filter #(.isDirectory %)
  (classpath/classpath))

但是,这似乎有效:

(filter #(.isDirectory (File. (URLDecoder/decode (.getPath %))))
  (classpath/classpath))

结果:

(#<File C:Documents%20and%20SettingsKennyMy%20Documentshello-heroku-clojure-worldtest>
 #<File C:Documents%20and%20SettingsKennyMy%20Documentshello-heroku-clojure-worldsrc>
 #<File C:Documents%20and%20SettingsKennyMy%20Documentshello-heroku-clojure-worldresources>
 #<File C:Documents%20and%20SettingsKennyMy%20Documentshello-heroku-clojure-worldtargetclasses>)

[我的类路径中的所有其他文件都是 JAR 文件。

编辑 - 我在Windows XP上运行它。

编辑 – 当然这是路径和空格的问题;我运行了以下内容:

(filter #(.exists %)
  (classpath/classpath))

结果:

()

来自clojure.java.classpath的相关代码:

(defn loader-classpath
  "Returns a sequence of File paths from a classloader."
  [loader]
  (when (instance? java.net.URLClassLoader loader)
    (map io/as-file (.getURLs ^java.net.URLClassLoader loader))))

问题出在路径中的空格上。这在版本 0.2.1 中得到了修复,但自述文件没有更新,仍然说0.2.0

在 project.clj :dependencies vector 中使用 [org.clojure/java.classpath "0.2.1"]

注意:clojure.java.classpath/classpath-directories函数将为您过滤目录。

最新更新