В веб-приложении Java, предположим, если я хочу получить InputStream файла XML, который помещен в CLASSPATH (т.е. внутри папки sources), как мне это сделать?
Получение входного потока из ресурса пути к классам (XML-файл)
Ответы (7)
ClassLoader.getResourceAsStream()
.
Как указано в комментарии ниже, если вы находитесь в среде с несколькими ClassLoader
(например, модульное тестирование, веб-приложения и т. д.), вам может потребоваться использовать Thread.currentThread().getContextClassLoader()
. См. http://stackoverflow.com/questions/2308188/getresourceasstream-vs-fileinputstream/2308388#comment21307593_2308388 а>.
InputStream is = new ClassPathResource("/path/to/your/file").getInputStream()
- person zhuguowei; 08.03.2018
Это зависит от того, где именно находится файл XML. Он находится в папке с исходным кодом (в «пакете по умолчанию» или «корне») или в той же папке, что и класс?
В первом случае вы должны использовать «/file.xml
» (обратите внимание на косую черту в начале), чтобы найти файл, и не имеет значения, какой класс вы используете, чтобы попытаться найти его.
Если XML-файл находится рядом с каким-то классом, SomeClass.class.getResourceAsStream()
с одним именем файла — это то, что нужно.
ClassLoader.class.getResourceAsStream("/path/to/your/xml")
и убедитесь, что ваш скрипт компиляции копирует файл xml в то место, где находится ваш CLASSPATH.
someClassWithinYourSourceDir.getClass().getResourceAsStream();
getClass().getResourceAsStream("...")
и т. д.
- person rogerdpack; 28.12.2016
Некоторые из параметров «getResourceAsStream()» в этом ответе у меня не сработали, но этот сработал:
SomeClassWithinYourSourceDir.class.getClassLoader().getResourceAsStream("yourResource");
Я попробовал предложенное решение, и косая черта в имени файла у меня не сработала, например: ...().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').
null
без /
. Добавление символа косой черты сработало для меня. Должна быть какая-то другая разница между @hussein-terek и моей установкой и вашей установкой.
- person Ajoy Bhatia; 01.06.2018
java.lang.NullPointerException: null
, и самый простой способ, я думаю, это new ClassPathResource("/path/to/your/file").getInputStream()
- person zhuguowei; 08.03.2018