getResourceAsStream(String name)查找资源

来源:互联网 发布:知美术馆地址 编辑:程序博客网 时间:2024/06/06 16:31

chad

2009318

 

一直习惯于用 Class.getResourceAsStream(String path),这个方法支持以绝对路径或相对路径寻找资源。如下:

com.test.Test.class.getResourceAsStream("resource.properties"),这是相对于当前类的所在包去查找资源
com.test.Test.class.getResourceAsStream("/config/resource.properties"),
这里以’/’开头,会在当前类的类加载器的classpath根目录开始,按照指定路径查找资源.

 

今日查看Struts的资源文件加载,于是用它的util类去加载资源文件,但是指定”/MessageResources.properties”,却是加载不进来。一看源代码,才方现它是用ClassLoader.getResourceAsStream(String name)。开始,很迷惑,因为Class.getResourceAsStream(String path)其实就是调用ClassLoader.getResourceAsStream(String name)来加载资源的,不应该有问题呀。后来看了下Class.getResourceAsStream的代码,原来,在这个方法里,先把传进去的路径先处理了一下,如果以”/”开始,则去掉。如果是相对路径,则会把路径构造完全,构造完后的路径,也不是以”/”开头。再去了解了一下ClassLoader.getResourceAsStream(String name),才明白,该方法只限于绝对路径查找资源,所以一开始就是认定从classpath根目录开始查找资源,所以以后用它来加载资源的话,在路径开头不要用”/”