it-swarm.com.ru

Получение входного потока из ресурса classpath (файл XML)

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

69
Veera

ClassLoader.getResourceAsStream() .

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

86
cletus
ClassLoader.class.getResourceAsStream("/path/file.ext");
29
jkarretero

Это зависит от того, где именно находится XML-файл. Он находится в папке источников (в «пакете по умолчанию» или в «корне») или в той же папке, что и класс?

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

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

12
Aaron Digulla

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

11
Clint

. SomeClassWithinYourSourceDir.getClass () getResourceAsStream ();

6
mP.

Некоторые параметры «getResourceAsStream ()» в этом ответе у меня не сработали, но вот этот:

SomeClassWithinYourSourceDir.class.getClassLoader () getResourceAsStream ( "yourResource").

4
user64141

Я попробовал предлагаемое решение, и косая черта в имени файла не сработала, например: ... (). GetResourceAsStream ("/ my.properties"); ноль был возвращен

Удаление косой черты сработало: .... getResourceAsStream ("my.properties"); 

Вот из 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'). 
0
Striker