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">