Wie eine Config-XML-Datei mit Fileinputstream zu laden, aber einen FileNotFoundException bekommen
-
18-09-2019 - |
Frage
Mein Build-Pfad in Eclipse sieht wie folgt aus:
ProjectName
-- WEB-INF
-- classes
-- myClass.class
-- configs
-- myConfig.xml
Meine absoluten Pfad zum Config sieht derzeit wie folgt aus:
C: \ Entwicklung \ Java \ Projektname \ WEB-INF \ configs \ myConfig.xml
Ich bin mit JAXB für die Bindung, und es wird ein Fileinputstream erwartet. Der Fileinputstream muss ein Strom für die XML-Konfigurationsdatei sein. Aber ich kann nicht herausfinden, wie die Fileinputstream für meine Config zu bekommen, und ich halte eine FileNotFoundException bekommen.
Ich möchte diese Config so geladen werden, dass jemand nicht den Pfad der Konfigurations hart codieren muss, weil ich auf die Freigabe der Open-Source-Projekt zu planen. Ich sehe eine Menge von Beispielen, in denen jemand nur Hardcodes den vollen absoluten Pfades, aber ich brauche es etwas flexibler „wie“ diese sein:
new Fileinputstream ( "/ WEB-INF / configs / myConfig.xml");
Danke!
Lösung
Ich würde empfehlen, dass myConfig.xml im WEB-INF / classes stattdessen setzen und über den Klassenlader geladen, da es in der Classpath ist. Der Aufruf getResourceAsStream () auf dem Servlet-Kontext wird ein Inputstream zurück, die Sie verwenden können. Es ist in Bezug auf den Kontext-Root, so können Sie, dass SIND abholen und es überall hinstellen -. Ihr Code wird immer noch funktionieren
Andere Tipps
Sie können den Eingangsstrom von relativen Pfaden unter WEB-INF ziemlich leicht mit ServletContext.getResourceAsStream()
Methode (javadoc erhalten hier ) und seine Varianten.
Zum Beispiel in Ihrem selvlet Code Sie können dies tun:
getServletContext().getResourceAsStream("/WEB-INF/configs/myConfig.xml") // your file
getServletContext().getResource("/WEB-INF") // URL to WEB-INF dir