首页 > 代码库 > Class和ClassLoader.getResource获取资源

Class和ClassLoader.getResource获取资源

资源就是系统内、项目内的各种文件。在Java中获取可以用File类和Class.getResource获取资源,直观的说,File是依赖于文件系统和操作系统的,通过相对和绝对路径定位,使用File接口可以用于获取系统内任何路径下的普通文件。Class和ClassLoader可以用于获取项目环境中的资源,‘环境中’的具体定义就是classpath。classpath相当于getResource参数的跟目录,ClassLoader.getResource是只能从这个根目录开始定位资源,Class.getResource的参数字符串如果以‘/’开始,就表示从classpath开始。

  • classpath包括写什么

   classpath并非一个目录,其是由很多目录组成,具体包含哪些目录可以在项目的根目录中的.classpath文件中看到,如下例子,Test项目下的.classpath

wKioL1N0rruB7SS2AAD8QYuhxlw887.jpg

wKiom1N0rubACX_6AAFbP4aiMyc559.jpg

也就是说,项目下的src,bin目录都包含在classpath中,当使用ClassLoader.getResource和Class.getResource("/****")时会从这些目录中一次查询有没有对应的资源。ClassLoader.getResource是不认识以“/”开始的字符串的,也就是ClassLoader.getResource("/")将返回null,如果要获取根目录,可以通过ClassLoader.getResource(""),其得到的是bin目录的URL,也就是说,通过是得到.class文件位置对应的classpathentry,而不是.java文件对应的classpathentry。

   Class.getResource有两种方式,第一种是通过以"/"开始的绝对路径,"/"表示上面的classpath,Java会逐一查询每个classpathentry对应位置,等价于ClassLoader.getResource("**/**"),第二种方式通过Class.getResource("***/***"),这是相对于Class实例对象的.class文件所在的目录位置,而非调用getResource类的.class文件所在位置的路径。也就是说,如果在Test.java里面调用Test2.class.getResource("***/***"),则"***/***"是相对Test2.class文件所在目录的路径。

本文出自 “深思JavaEE” 博客,请务必保留此出处http://xjava.blog.51cto.com/2949562/1412044