كيفية تحميل ملف Config XML مع FileInputstream، ولكن الحصول على filenotfoundException

StackOverflow https://stackoverflow.com/questions/2211991

سؤال

يشبه مسار البناء الخاص بي في الكسوف هذا:

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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top