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

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

Ответ 1

ClassLoader.getResourceAsStream().

Как указано в комментарии ниже, если вы находитесь в среде [Class CNC] ClassLoader (например, модульное тестирование, webapps и т.д.), Вам может потребоваться использовать Thread.currentThread().getContextClassLoader(). См. fooobar.com/questions/7374/....

Ответ 2

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

Ответ 3

Это зависит от того, где именно находится файл XML. Является ли он в папке источников (в "пакете по умолчанию" или "root" ) или в той же папке, что и класс?

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

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

Ответ 4

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

Ответ 5

someClassWithinYourSourceDir.getClass() getResourceAsStream();.

Ответ 6

Некоторые из параметров "getResourceAsStream()" в этом ответе не работали для меня, но этот:

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

Ответ 7

По умолчанию каждый ресурс, добавленный в путь к классам в веб-приложении, копируется в папку WEB-INF/classes в развернутой войне.

вы можете управлять этим при разработке приложения в eclipse через:

Щелкните правой кнопкой мыши проект → свойства → Путь сборки Java → вкладка "Источник" → папка с выходом по умолчанию

В вашем сервлете вы можете получить доступ к ресурсу, предварительно указав свой путь на "/", который указывает на WEB-INF/classes.

Например, для доступа к pdf-sample.pdf в разделе WEB-INF/classes вы можете использовать следующее:

getClass().getResourceAsStream("/pdf-sample.pdf")

Этот учебник очень хорошо объясняет возможные способы чтения файла ресурсов из пути к классам в Java-приложении, его стоит прочитать.

Ответ 8

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

Удаление слэш работало:.... 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').