Java: доступ к файлу свойств внутри войны

Я уже искал StackOverflow для "свойств внутри войны", но ни один из результатов не работал для моего случая.

Я использую Eclipse Galileo и GlassFish v3 для разработки набора веб-сервисов. Я использую "динамический веб-проект" со следующей структурой

Src
-java_code_pkg_1
-java_code_pkg_2
-com.company.config
--configfile.properties WebContent
-META-INF
-WEB-INF
--log4jProperties
--web.xml
--applicationContext.xml
--app-servlet.xml

Я хочу получить доступ к " configfile.свойства "внутри одного из исходных файлов в "java_code_pkg1". Я использую Spring Framework, и этот файл будет создан после запуска приложения на сервере.

Я пробовал следующие, не повезло

getResourceAsStream("/com.company.config/configfile.properties");
getResourceAsStream("/com/company/config/configfile.properties");
getResourceAsStream("com/company/config/configfile.properties");
getResourceAsStream("/configfile.properties");
getResourceAsStream("configfile.properties");

getResourceBundle(..) didn't work either.

можно ли получить доступ к файлу, когда он не находится под путем WEB-INF/classes? если да то как?

спасибо

6 ответов


Если вы находитесь в войне, ваш путь к классам " текущий каталог "-"WEB-INF/classes". Просто поднимитесь на два уровня.

getResourceAsStream("../../com/company/config/configfile.properties");

Это ужасно, но это работает. По крайней мере, он работает под tomcat, jboss и geronimo, и он работает сегодня.

P. S. ваша структура каталога не очень понятно. Возможно, это:

getResourceAsStream("../../com.company.config/configfile.properties");

Properties props = new Properties();
props.load(this.getClass().getResourceAsStream("/com/company/config/file.properties"));

работает, когда я в режиме отладки. Я вижу значения в отладчике, но я получаю исключение NullPointerException сразу после выполнения "props.загрузите " линию и перед выходом на свет под ней.

это другая проблема. По крайней мере, теперь я знаю, что это способ доступа к файлу конфигурации.

Спасибо за помощь.


проверьте расположение файла свойств в файле WAR. Если он находится в каталоге WEB-INF/classes под com/company/каталог конфигурации getResourceAsStream("com/company/config/configfile.properties") должно работать или getResourceAsStream ("это должно работать, если файл конфигурации не находится в разделе WEB-INF/classes directoy

также попробуйте использовать getClass().getClassLoader().методаgetresourceasstream.


вы уверены, что файл был включен в war-файл? Много раз процесс сборки войны будет отфильтровывать non .файл класса.


Каков путь после его развертывания на сервере? Можно использовать сканер для ручного чтения в ресурсе. Из файла java в пакете создайте новый файл("../applications/") получит файл, указывающий на {glassfish install}\domains\{доменное имя}\applications. Может быть, вы могли бы изменить это путь к файлу, чтобы направить вас туда, куда вам нужно идти?


поскольку вы используете Spring, используйте поддержку ресурсов весной для непосредственного ввода файлов свойств.

см.http://static.springsource.org/spring/docs/3.0.x/reference/resources.html

даже если класс, для которого требуется файл свойств, не управляется Spring, вы все равно можете получить доступ к ApplicationContext и использовать его для загрузки ресурса

ресурс будет чем-то вроде, classpath:settings.свойства, предполагая, что что ваш файл свойств был подобран вашей сборкой и сброшен в файл war.

вы также можете вводить непосредственно из документов:

<property name="template" value="classpath:some/resource/path/myTemplate.txt">