Java:访问war中的属性文件

我已经在StackOverflow中搜索了“战争中的属性”,但没有一个结果适用于我的情况。

我正在使用Eclipse Galileo和GlassFish v3来开发一组Web服务。 我正在使用具有以下结构的“动态Web项目”

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 

我想访问“java_code_pkg1”中的一个源文件中的“configfile.properties”。 我正在使用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路径下时是否可以访问文件? 如果是的话怎么样?

谢谢

如果你在战争中,你的类路径“当前目录”是“WEB-INF / classes”。 简单地上升两个级别。

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

这太可怕但它确实有效。 至少,它在tomcat,jboss和geronimo下运行,它今天起作用。

PS你的目录结构不是很清楚。 也许它是:

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

我在调试模式时工作。 我可以在调试器中看到这些值,但是在执行“props.load”行之后,在进入它下面的灯之前,我得到一个NullPointerException。

这是一个不同的问题。 至少现在我知道这是访问配置文件的方法。

感谢您的帮助。

检查WAR文件中属性文件的位置。 如果它位于com / company / config目录下的WEB-INF / classes目录中,则getResourceAsStream("com/company/config/configfile.properties")应该工作或getResourceAsStream(“如果配置文件不在WEB-INF下,这应该可以工作/ classes directoy

还可以尝试使用getClass()。getClassLoader()。getResourceAsStream。

您确定该文件包含在war文件中吗? 很多时候,war构建过程会过滤掉非.class文件。

一旦部署到服务器,路径是什么? 可以使用Scanner手动读入资源。 从包中的java文件,创建一个新文件(“../ applications /”)将获得一个指向{glassfish install} \ domains \ {domain name} \ applications的文件。 也许你可以改变那个文件路径,引导你到你需要去的地方?

由于您使用的是Spring,因此请使用Spring中的Resource支持直接注入属性文件。

请参阅http://static.springsource.org/spring/docs/3.0.x/reference/resources.html

即使需要属性文件的类不是Spring管理的,您仍然可以访问ApplicationContext并使用它来加载资源

资源类似于classpath:settings.properties,假设你的属性文件被你的构建文件拾取并放入war文件中。

您也可以直接从文档中注入: