我想从我的jsf 2.2项目中的一个属性文件中读出来。我使用eclipse kepler。
我尝试在包含de.exanple的文件夹src中的java-bean中使用它。 bean的文件名为PageServiceBean.java。
属性文件位于WEB-INF/resources/prop
文件夹中。属性文件名为config.properties。
我已经读过我可以使用javax.faces.WEBAPP_RESOUCRES_DIRECTORY
param名称和/WEB_INF/resoucres
但是我没有获得配置文件的路径。 你能告诉我在哪里可以得到路径名。我想我必须使用相对路径名。 你能帮我吗?
更新
我从你那里执行第二个代码片段:
private Properties getProperties() {
Properties prop = new Properties();
try {
//load a properties file
prop.load(new FileInputStream("config2.properties"));
} catch(Exception e) {
}
return prop;
}
public void setProperty1(Integer value) {
Properties prop = getProperties();
prop.setProperty("ort", value.toString());
try {
prop.store(new FileOutputStream("config2.properties"), null);
Properties prop2 = getProperties();
} catch (IOException ex) {
Logger.getLogger(PageServiceBean.class.getName()).log(Level.SEVERE, null, ex);
}
}
有效!我使用Properties prop3 = getProperties();
来读取属性文件config2.properties。文件存储在eclipse主路径ECLIPSE_HOME = C:\elipse_jee\eclipse
中。我可以将路径更改为特定路径,例如WEB_INF/resources
?
答案 0 :(得分:0)
我会告诉你我的方法,但我没有尝试回答你的问题。
要在JEE应用程序中使用属性文件,我创建了一个无状态bean,它使用属性的getter和setter为应用程序的其余部分提供服务。只有这个EJB才能访问服务器中的属性文件,并使用java.util.Properties。
private Properties getProperties() {
Properties prop = new Properties();
try {
//load a properties file
prop.load(new FileInputStream("config.properties"));
} catch(Exception e) {
}
return prop;
}
获得特定属性的访问方法后:
public Integer getProperty1() {
Properties prop = getProperties();
String value = prop.getProperty("myProperty1Name");
if(value != null) {
return Integer.parseInt(value );
}
return 0;
}
public void setProperty1(Integer value) {
Properties prop = getProperties();
prop.setProperty("myProperty1Name", value.toString());
try {
prop.store(new FileOutputStream("config.properties"), null);
} catch (IOException ex) {
Logger.getLogger(PropertiesManager.class.getName()).log(Level.SEVERE, null, ex);
}
}
在这种方法中,如果文件不存在,则会创建该文件。但是,属性的默认值将是硬编码的。对于这种方法,放置文件的位置并不重要。实际位置取决于您的JEE服务器配置,域配置,应用程序部署文件等。
答案 1 :(得分:0)
ServletContext#getResourceAsStream()
及其JSF委托人ExternalContext#getResourceAsStream()
提供了Web内容资源。所以,这应该做:
ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
prop.load(ec.getResourceAsStream("/WEB-INF/resources/prop/config2.properties"));