你的位置:首页 > Java教程

[Java教程]java加载配置文件


转载自http://blog.163.com/wb_zhaoyuwei/blog/static/183075439201261764454791/

当我们自己的程序需要处理配置文件时(比如

  (1)我的配置文件应该放在哪里?

  (2)怎么我的配置文件找不到了?

对于第一个问题,答案是:请将你的资源文件放在classpath里,如果资源文件在jar中,请将该jar文件也加到classpath里面。

对于第二个问题,就得看你是使用的是哪个类(Class还是ClassLoader)来加载资源文件了,所以接下来分别讨论一下Class类和ClassLoader类对于资源文件的加载机制。

(一)用Class类加载资源文件

通过调用Class类的getResourceAsStream方法来加载资源文件:

通常用得较多的是JdbcUtil.class.getResourcrAsStream("/database.properties");

 

public InputStream getResourceAsStream(String pathToConfigFile);

该方法接收一个String类型的参数(pathToConfigFile)来表示资源文件的地址,如果加载成功,则返回该资源文件的输入流(InputStream),如果失败,则返回null。

重要的是,在传入pathToConfigFile参数时,有两种方式,

第一种方式为绝对定位方式,即pathToConfigFile以"/"开头,此时Java以classpath为根目录,直接加上pathToConfigFile来搜索资源文件。

第二种方式为相对定位方式,即pathToConfigFile不以"/"开头,此时资源文件的全路径应该为:调用getResourceAsStream方法的类的package路径加上pathToConfigFile。(在将package转为目录时将"."变成"/") 

(二)用ClassLoader类加载资源文件

ClassLoader类也提供和Class类相同的加载方法:

public InputStream getResourceAsStream(String pathToConfigFile);

 

用ClassLoader加载配置文件时,pathToConfigFile均不能以"/"开头,在查找时直接在classpath下进行查找。Class类在查找资源文件时,也是代理(delegate)给ClassLoader完成查找功能的,请参考Java官方文档。

InputStream input = this.getClass().getClassLoader().getResourceAsStream("resources/config.properties");
 InputStream input = ClassLoader.getSystemResourceAsStream("resources/config.properties");
InputStream input = ClassLoader.getSystemClassLoader().getResourceAsStream("resources/config.properties");