Java:访问war中的属性文件

时间:2010-07-20 15:07:00

标签: java configuration properties 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路径下时是否可以访问?如果是,那怎么样?

谢谢

6 个答案:

答案 0 :(得分:8)

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

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

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

感谢您的帮助。

答案 1 :(得分:7)

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

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

这很糟糕但是有效。至少,它在tomcat,jboss和geronimo下工作,它今天

P.S。您的目录结构不是很清楚。也许是:

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

答案 2 :(得分:3)

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

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

答案 3 :(得分:1)

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

请参阅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">