Получение inputstream из ресурса пути к классам (XML-файл)


в веб-приложении Java предположим, что я хочу получить входной поток XML-файла, который помещается в путь к классам (т. е. внутри источник папка), как мне это сделать?

7 67

7 ответов:

ClassLoader.getResourceAsStream().

, как указано в комментарии ниже, если вы находитесь в мульти-ClassLoader среда (например, модульное тестирование, веб-приложения и т. д.) возможно, вам придется использовать Thread.currentThread().getContextClassLoader(). См http://stackoverflow.com/questions/2308188/getresourceasstream-vs-fileinputstream/2308388#comment21307593_2308388.

ClassLoader.class.getResourceAsStream("/path/file.ext");

это зависит от того, где именно находится XML-файл. Находится ли он в папке sources (в "пакете по умолчанию" или "Корне") или в той же папке, что и класс?

в первом случае, вы должны использовать "/file.xml" (обратите внимание на Слэш), чтобы найти файл и не важно, какой класс вы используете, чтобы попытаться найти его.

Если XML-файл находится рядом с каким-либо классом, SomeClass.class.getResourceAsStream() только с именем файла-это путь.

ClassLoader.class.getResourceAsStream("/path/to/your/xml") и убедитесь, что ваш сценарий компиляции копирует xml-файл туда, где в вашем пути к классам.

someClassWithinYourSourceDir.getClass().getResourceAsStream ();

некоторые из опций "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').