Kompojure: Zugriff auf das Dateisystem zugreifen
Frage
Dies ist meine Projekt.clj -Datei:
(defproject org.github.pistacchio.deviantchecker "0.9.0"
:description "A one page application for keeping track of changes on deviantart.com gallieries"
:dependencies [[org.clojure/clojure "1.2.1"]
[org.clojure/clojure-contrib "1.2.0"]
[enlive "1.0.0"]
[compojure "0.6.4"]
[ring/ring-jetty-adapter "1.0.0-beta2"]]
:dev-dependencies [[lein-ring "0.4.6"]]
:ring {:handler org.github.pistacchio.deviantchecker.core/app}
:main org.github.pistacchio.deviantchecker.core)
Und das mein Routing:
(defroutes main-routes
(GET "/" [] (get-home))
(GET "/add" [d] (add-gallery d))
(GET "/delete" [d] (delete-gallery d))
(GET "/check" [d] (check-gallery d))
(route/resources "/")
(route/not-found "Page not found"))
Ich habe einige statische Webdateien in Web /resources/public
Und ich kann auf sie zugreifen. In dem Code muss ich auch auf einige Dateien auf dem Dateisystem zugreifen, die sich befinden /resources/data
und /resources/tpl
. Verwendung lein ring
Server oder lein run
, Der folgende Anruf funktioniert einwandfrei
(java.io.File. "resources/tpl/home.html")
aber beim Packen der Anwendung mit lein uberwar
und einsatz unter tomcat es fehlschlägt und ich erhalte eine FilenotfoundException. Vielleicht liegt das daran, dass mit Lein die Aktuelles Arbeitsverzeichnis ist die Projektwurzel, während es unter Tomcat ist, ist es Tomcats Bin -Verzeichnis.
Zum Beispiel habe ich /resources/data/data.dat
das wird im Krieg als /data/data.dat
Daher funktioniert "Ressourcen/Data/Data.dat" unter Tomcat oder "Data/Data.dat" nicht in der Entwicklung.
Was ist übrigens die richtige Art, dies in Kompojure zu verwalten? Vielen Dank.
Lösung
Sie können verwenden clojure.java.io/resource
So greifen Sie auf Ressourcen zu, unabhängig davon, ob Sie sich im lokalen Dateisystem befinden oder in einem Glas/Krieg gepackt sind:
(require '[clojure.java.io :as io])
(io/reader (io/resource "public/some/file.txt")) ; file in resource classpath or $root/resources/public...
Sie sollten wahrscheinlich nicht versuchen, sie aus einem Verzeichnis zu laden, da Sie nicht sicher sein können, wo die Datei enden wird, wenn sie aus einem Glas/Krieg bereitgestellt wird (oder auch wenn sie sich überhaupt auf dem Dateisystem befindet) .