普通Java类读取WEB-INF目录下的jdbc.properties属性文件
May132014
今天更改一个项目的部分功能,需要读取WEB-INF目录下的jdbc.properties文件,但是当运行时候却出现IO读取异常,说系统找不到路径,但是查看文件目录结构是正确的。那么,只能是路径问题,网上查询资料获得了解决办法,大体思路是获得当前类的绝对路径然后截取字符串得到WEB-INF路径然后拼接,具体实例代码如下:
try{
//获得当前类的绝对路径
//replaceAll("%20", "")这个替换是因为据说getPath()读取时会把空格读取为“%20”
String url = this.getClass().getResource("/").getPath()
.replaceAll("%20", "");
//截取字符串得到WEB-INF路径然后拼接
String path = url.substring(0, url.indexOf("WEB-INF")) +
"WEB-INF/config/jdbc.properties";
Properties properties = new Properties();
properties.load(new FileInputStream(path));
//获得属性文件中的jdbc.username
String dbUser = properties.getProperty("jdbc.username");
}catch(Exception e){
e.printStackTrace();
}
经测试以上这段代码的确可以正确的读取到jdbc.properties属性文件,但是会经过大量的字符串拼接操作,代码不太直观。相对来说,Csyor还是比较喜欢下面这种方法,但是我这网上看到有的网友说不提倡使用,这里就仁者见仁智者见智吧。
try{ //直接获得WEB-INF/config/jdbc.properties的绝对路径 String path = getServletContext() .getRealPath("WEB-INF/config/jdbc.properties"); Properties properties = new Properties(); properties.load(new FileInputStream(new File(path))); //获得属性文件中的jdbc.username String dbUser = properties.getProperty("jdbc.username"); }catch(Exception e){ e.printStackTrace(); }