В веб-приложении Java предположим, что если я хочу получить InputStream файла XML, который помещается в CLASSPATH (т.е. внутри папки источников), как это сделать?
Получение входного потока из ресурса classpath (XML файл)
Ответ 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').