كيفية تحميل ملف Config XML مع FileInputstream، ولكن الحصول على filenotfoundException
-
18-09-2019 - |
سؤال
يشبه مسار البناء الخاص بي في الكسوف هذا:
ProjectName
-- WEB-INF
-- classes
-- myClass.class
-- configs
-- myConfig.xml
يبدو أن طريقي المطلق إلى التكوين يشبه هذا:
C: Development Java ProjectName Web-Inf Configs MyConfig.xml
أنا أستخدم Jaxb للربط، وتتوقع fileinputstream. يجب أن تكون fileinputstream أن تكون دفقا لملف تكوين XML. ومع ذلك، لا يمكنني معرفة كيفية الحصول على fileinputtream على التكوين الخاص بي، والحفاظ على الحصول على filenotfoundException.
أريد تحميل هذا التكوين بحيث لا يحتوي شخص ما على تشغيل المسار إلى التكوين لأنني أخطط لإطلاق سراح المصدر المفتوح للمشروع. أرى الكثير من الأمثلة حيث يردد شخص ما المسار المطلق الكامل، لكنني بحاجة إلى أن أكون شيئا أكثر مرونة "مثل" هذا:
ملف fileinputstream جديد ("/ web-inf / configs / myconfig.xml")؛
شكرا!
المحلول
أود أن أوصي بوضع ذلك myconfig.xml في دليل Web-Inf / Classes بدلا من ذلك وتحميله عبر محمل الفئة، لأنه في ClassPath. سيعود الاتصال GetResourceasStream () على سياق Servlet Inputstream أنه يمكنك استخدامه. إنه أمر بالنسبة إلى جذر السياق، حتى تتمكن من التقاط هذه الحرب ووضعها في أي مكان - سوف لا يزال الرمز الخاص بك يعمل.
نصائح أخرى
يمكنك الحصول على دفق الإدخال من المسارات النسبية تحت Web-inf بسهولة إلى حد ما ServletContext.getResourceAsStream()
الطريقة (Javadoc. هنا) ومتغيراتها.
على سبيل المثال، في رمز Selvlet الخاص بك، يمكنك القيام بذلك:
getServletContext().getResourceAsStream("/WEB-INF/configs/myConfig.xml") // your file
getServletContext().getResource("/WEB-INF") // URL to WEB-INF dir