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

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

Я использую 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.properties" внутри одного из исходных файлов в "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 ответов

Решение
Properties props = new Properties();
props.load(this.getClass().getResourceAsStream("/com/company/config/file.properties"));

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

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

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

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

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

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

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

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

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

Также попробуйте использовать getClass(). GetClassLoader(). GetResourceAsStream.

Вы уверены, что файл включен в ваш военный файл? Много раз, процесс сборки войны отфильтровывает файлы не.class.

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

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

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

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

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

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

<property name="template" value="classpath:some/resource/path/myTemplate.txt">
Другие вопросы по тегам