读取配置文件需要指定配置文件的路径和文件名,可以在Java代码里硬编码配置文件名,然后将配置文件所在目录加入classpath;也可以把路径和文件名都硬编码在Java代码里,只要启动脚本和配置文件的相对位置不变,就不必修改代码。第一种方法更灵活(指定配置文件路径的工作放在了启动脚本里,而不是Java代码中),推荐使用。
硬编码配置文件名
用Class的getResourceAsStream(String name)方法加载配置文件,代码如下:
InputStream in = this.getClass().getResourceAsStream("/db.properties");
Properties p = new Properties();
p.load(in); System.out.println("value is: " + p.getProperty("db"));
其中GetResources是运行这段代码所在类的类名,部署目录结构是:
root
|-bin
|-start.bat
|-conf
|-db.properties
|-lib
|-res.jar
启动脚本start.bat内容是:
java -cp f:\VMFiles\tmpFiles\goduEx2\lib\res.jar;f:\VMFiles\tmpFiles\goduEx2\conf getResources.GetResources
其中res.jar的结构是:getResources/GetResources.class(假设代码所在文件的包名是getResources)。
这里最重要的是getResourceAsStream方法的参数前面要加上"/"。
在static方法里无法使用"this"关键字,可以硬编码类名,在Eclipse中重构可以同时修改类名:
InputStream in = GetResources.class.getResourceAsStream("/db.properties");
指定配置文件相对路径
将上面代码的第一句改为:
InputStream in = new FileInputStream("../conf/db.prop");
相应地start.bat也不需要把conf加到classpath里:
java -cp f:\VMFiles\tmpFiles\goduEx2\lib\res.jar getResources.GetResources
不推荐ResourceBundle.getBundle()方法,因为这个方法不是用来加载文件的。