我需要读取glassfish 4应用程序中的属性文件。该文件需要位于应用程序中的某个位置(即不在文件系统中的某个随机位置)。
如果重要的话,我正在开发eclipse,项目是用maven构建的,而且这个工件是一场战争。
在我看来,要完成这项工作,我需要了解三件事。
1)原始文件需要在哪里?
2)文件需要在哪里结束?
3)我如何阅读?
到目前为止,我创建了文件:
src/main/resources/version.properties
最终在
WEB-INF/classes/version.properties
我不知道这是不是正确的位置。
基于类似的问题,我定义了一个ServletContextListener:
public class ServletContextClass implements ServletContextListener {
...
@Override
public void contextInitialized(ServletContextEvent arg0) {
ServletContext ctx = arg0.getServletContext();
InputStream istream = ctx.getResourceAsStream("version.properties");
// at this point, istream is null
Properties p = new Properties();
p.load(istream);
}
}
我不确定我是否将文件放在错误的位置,如果我读错了,或者两者都错。
更新:以下“有效”:
@Override
public void contextInitialized(ServletContextEvent arg0) {
ResourceBundle bundle = ResourceBundle.getBundle("version");
if (bundle == null) {
logger.info("bundle is null");
} else {
logger.info("bundle is not null");
logger.info("version: " + bundle.getString("myversion"));
}
}
但是,我不认为这是正确的解决方案。捆绑包用于语言环境支持,这不属于该类别。
更新2:我更正了文件结束的位置。
答案 0 :(得分:1)
1)将version.properties文件放在
中src/main/resources/version.properties
似乎是正确的。
2)在目标战争中,文件确实最终进入
WEB-INF/classes/version.properties
3)读取文件:我已经定义了ServletContextListener。如果不这样做,则需要定义一个并在web.xml中进行配置。这是我的ServletContextListener的一部分:
package com.mycompany.service;
public class ServletContextClass implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent arg0) {
ServletContext ctx=arg0.getServletContext();
try {
Properties p = new Properties();
InputStream istream = ctx.getResourceAsStream("/WEB-INF/classes/version.properties");
p.load(istream);
Properties sysProps = System.getProperties();
sysProps.putAll(p);
} catch (IOException e) {
logger.error("Error reading " + "version.properties");
}
}
}
它配置了这个web.xml:
<listener>
<listener-class>com.mycompany.service.ServletContextClass</listener-class>
</listener>