Как загрузить XML-файл конфигурации с помощью FileInputStream, но получить исключение FileNotFoundException

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

Вопрос

Мой путь сборки в Eclipse выглядит так:

ProjectName
   -- WEB-INF
      -- classes
         -- myClass.class
      -- configs
         -- myConfig.xml

Мой абсолютный путь к конфигурации сейчас выглядит так:

C:\Development\Java\ProjectName\WEB-INF\configs\myConfig.xml

Я использую JAXB для привязки, и он ожидает FileInputStream.FileInputStream должен быть потоком для файла конфигурации XML.Однако я не могу понять, как получить FileInputStream для моей конфигурации, и продолжаю получать исключение FileNotFoundException.

Я хочу, чтобы эта конфигурация загружалась таким образом, чтобы кому-то не приходилось жестко прописывать путь к конфигурации, потому что я планирую выпустить проект с открытым исходным кодом.Я вижу много примеров, когда кто-то просто жестко запрограммировал полный абсолютный путь, но мне нужно, чтобы это было что-то более гибкое, «например» следующее:

новый FileInputStream("/WEB-INF/configs/myConfig.xml");

Спасибо!

Это было полезно?

Решение

Я бы рекомендовал вместо этого поместить myConfig.xml в каталог WEB-INF/classes и загрузить его через загрузчик классов, поскольку он находится в пути к классам.Вызов getResourceAsStream() в контексте сервлета вернет входной поток, который вы можете использовать.Это относительно корня контекста, поэтому вы можете взять этот WAR и поместить его куда угодно — ваш код все равно будет работать.

Другие советы

Вы можете довольно легко получить входной поток относительных путей в WEB-INF с помощью ServletContext.getResourceAsStream() метод (javadoc здесь) и его варианты.

Например, в вашем коде селвлета вы можете сделать это:

getServletContext().getResourceAsStream("/WEB-INF/configs/myConfig.xml") // your file
getServletContext().getResource("/WEB-INF") // URL to WEB-INF dir
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top