为了更灵活的对项目进行配置,我们采用db.properties文件将配置信息存储起来,然后用Properties类去读取,代码如下:
Properties props = new Properties();
FileInputStream in = new FileInputStream("./src/db.properties");
props.load(in);
url = props.getProperty("url");
user = props.getProperty("user");
password = props.getProperty("password");
driverClass = props.getProperty("driverClass");
但是这样又带来了新的问题:
当项目部署在javaSE上时自然没什么问题,但是如果要部署在javaWeb项目上时,一定会出现如下错误:
java.io.FileNotFoundException: .\src\db.properties (系统找不到指定的路径。)
为什么呢?
原因是:
A: 在javaSE项目中,“.”代表java命令的运行目录从项目的根目录开始
B: 在Web项目中,“.”代表java命令的运行目录从tomcat/bin目录开始
临时解决:可以将db.properties文件添加到tomcat/bin/src目录下(需手动创建src文件夹)
缺点:只能读,不能修改,一旦修改,整个web项目将自动重新加载,影响客户使用
之前在web项目中可以使用ServletContext对象的getRealpath()方法来加载该文件,但是在javaSE项目中是无法获取ServletContext的,很矛盾
最终,有个更通用的方法来解决这个问题:
使用类路径的读取方法
这样,即使写的是同样的路径,也不会影响到配置文件的加载
具体做法:
注意:配置文件db.properties都是放在src目录下的
类路径的获取方法:
$当前类名.class.getResourceAsStream(“/db.properties”)
“/” 代表classpath的根目录
在java项目下,classpath的根目录从 bin目录开始
在Web项目下,classpath的根目录从 WEB-INF/classes/目录开始
props = new Properties();
InputStream in = JdbcUtil.class.getResourceAsStream("/db.properties");
props.load(in);
这种方式是迄今为止,最通用的加载方式,确保不论是在java项目中还是web项目中都不会出问题!因为这种方法找到的是始终是以classpath为参照的
如果仅仅是在Web项目中,获取加载文件还有一种方法,配置文件需要放在src目录下:
prop = new Properties();
prop.load(new FileReader(BasicFactory.class.getClassLoader().getResource("config.properties").getPath()));