2012-07-01 83 views
4

我使用Leiningen有以下目錄結構的小Clojure的項目工作Acessing資源文件:Clojure中webnoir項目

  • project
    • src
    • test
      • xxx
        • login.clj
    • resources
      • public
        • css
          • bootstrap.css

在test目錄下的文件login.clj,我試圖發出聲音在respuces /公共區域/ CSS目錄中的文件bootstrap.css:

(def css-file "/css/bootstrap.css") 
(def css-contents (slurp css-file)) 

它返回找不到文件的錯誤:

Exception in thread "main" java.io.FileNotFoundException: /css/bootstrap.css (No such file or directory), compiling:(login.clj:10)

所以問題很簡單,我應該怎麼做才能訪問文件?

回答

2

Slurp將讀取文件系統中的文件,而不是類路徑。那麼你在那裏試圖做什麼,你試圖從你的文件系統的根目錄讀取/css/bootstrap.css中的文件,它不存在,就像錯誤消息所說的那樣。

如果您只是爲了測試目的而閱讀它,那麼您應該能夠使用像resources/public/css/bootstrap.css這樣的相對路徑啜飲它,假設您正在運行項目目錄下的測試。

+0

謝謝!有效。 – r0hitsharma

1

運行時請檢查實際的類路徑。有可能是classspath引用./resources目錄,而不是./resources/public目錄。

請嘗試使用「/public/css/bootstrap.css」來解決此問題。

+0

我真的不知道如何檢查classpath [這裏是noob的位]。 雖然當我使用打嗝頁面助手「include-css」,如:'(include-css「/css/bootstrap.css」)' 它運行得很好[我的意思是生成的HTML頁面有CSS ] – r0hitsharma

3

您真正需要使用 '資源' - 無論是

  1. (clojure.java.io/resource 「相對/路徑」),它返回一個URL來 文件,

  2. (noir.io/get-resource"relative/path「)它返回 文件,或

  3. (noir.io/slurp-resource「relative/path」),它返回文件的內容 。

別擔心 - 你不是第一個被這個問題困擾的人!