Получение inputstream из ресурса пути к классам (XML-файл)
в веб-приложении Java предположим, что я хочу получить входной поток XML-файла, который помещается в путь к классам (т. е. внутри источник папка), как мне это сделать?
7 ответов:
ClassLoader.getResourceAsStream()
., как указано в комментарии ниже, если вы находитесь в мульти-
ClassLoader
среда (например, модульное тестирование, веб-приложения и т. д.) возможно, вам придется использоватьThread.currentThread().getContextClassLoader()
. См http://stackoverflow.com/questions/2308188/getresourceasstream-vs-fileinputstream/2308388#comment21307593_2308388.
это зависит от того, где именно находится XML-файл. Находится ли он в папке sources (в "пакете по умолчанию" или "Корне") или в той же папке, что и класс?
в первом случае, вы должны использовать "
/file.xml
" (обратите внимание на Слэш), чтобы найти файл и не важно, какой класс вы используете, чтобы попытаться найти его.Если XML-файл находится рядом с каким-либо классом,
SomeClass.class.getResourceAsStream()
только с именем файла-это путь.
ClassLoader.class.getResourceAsStream("/path/to/your/xml")
и убедитесь, что ваш сценарий компиляции копирует xml-файл туда, где в вашем пути к классам.
некоторые из опций "getResourceAsStream ()" в этом ответе не работали для меня, но этот сделал:
SomeClassWithinYourSourceDir.класс.getClassLoader().getResourceAsStream ("yourResource");
я попробовал предложенное решение и Слэш в имени файла не работает для меня, например: ...().getResourceAsStream ("/my.свойства"); null был возвращен
удаление косой черты работало: ....getResourceAsStream ("мой.свойства");
вот из doc API: Перед делегированием абсолютное имя ресурса строится из данного имени ресурса с помощью следующего алгоритма:
If the name begins with a '/' ('\u002f'), then the absolute name of the resource is the portion of the name following the '/'. Otherwise, the absolute name is of the following form: modified_package_name/name Where the modified_package_name is the package name of this object with '/' substituted for '.' ('\u002e').