使用ClassLoader加载包内的资源

来源:互联网 发布:mac word转pdf原页面 编辑:程序博客网 时间:2024/05/04 18:38

ClassLoader可以把包(jar包,war包)内的class文件加载到 JVM中,第一步就是将class文件以stream的方式读取出来。ClassLoader也将这个加载资源的方法 getResourceAsStream暴露了出来。编程时可以使用这个方法来加载包内的任何资源,比如properties文件,图片等。

使用ClassLoader加载资源文件

当使用ClassLoader加载资源的时候,参数应该是资源文件在包内的路径,不以“/”开头。对于classloader.getres.GetResourceTest包结构存在test.properties文件,

如果要加载test.properties。ClassLoader的getResourceAsStream的参数就是“classloader/getresource/test.properties”。

ClassLoader可以加载任何一个在classpath上存在的资源文件,可以在一个包内,也可以不在一个包内。简单来说,只要把资源文件也当作一个类来看待,把类的全路径名中的“.”换成“/”就可以了。

getResourceAsStream的参数也可以有“..”,用来回到上一层目录。

使用Class加载资源文件

Class类也有一个getResourceAsStream方法。对于同一个包中的资源文件,使用Class加载资源文件会更简单。

比如上例中如果GetResourceTest类想加载相同包下的test.properties,只要使用下面的代码就行了。

GetResourceTest.class.getResourceAsStream(“test.properties”);

Class类也是使用ClassLoader去加载资源的。它所做的事情就是将参数修订成ClassLoader需要的格式。变化都在Class类的resolveName方法中:
  • 对于不是以“/”开头的参数,就认为这个路径是相对于当前类的路径,所以加载当前包中的资源只要写资源文件的名字就可以了。方法最大的一块代码就是为了得到当前类的路径,然后和传进来的相对路径参数拼起来,作为资源文件的绝对路径丢给CL。
  • 对于以“/”开头的参数,就认为参数是资源文件的绝对路径,将这个斜线去掉之后,丢给CL去加载就行了。
 


0 0
原创粉丝点击