您的位置:首页 > 其它

Class和ClassLoader.getResource获取资源

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

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






也就是说,项目下的src,bin目录都包含在classpath中,当使用ClassLoader.getResource和Class.getResource("/****")时会依次从classpathentry下查询,找到第一个匹配的资源。对于普通的java工程Class.getResource("/")返回的为bin目录,Web工程Class.getResource("/")将返回WEB-INF/classes目录。ClassLoader.getResource是不认识以“/”开始的字符串的,也就是ClassLoader.getResource("/")将返回null,如果要获取根目录,可以通过ClassLoader.getResource("")。
Class.getResource有两种方式,第一种是通过以"/"开始的绝对路径,"/"表示上面的classpath,等价于ClassLoader.getResource("**/**"),第二种方式通过Class.getResource("***/***"),这是相对于Class实例对象的.class文件所在的目录位置,而非调用getResource类的.class文件所在位置的路径。也就是说,如果在Test.java里面调用Test2.class.getResource("***/***"),则"***/***"是相对Test2.class文件所在目录的路径。

由于需要使用到的.jar都在classpath下面,因此,getResource也可以得到.jar包中的资源。如Test.class.getResource("/java/lang/Object.class"),Test.class.getClassLoader.getResource("java/lang/Object.class");

本文出自 “深思JavaEE” 博客,请务必保留此出处http://xjava.blog.51cto.com/2949562/1412044
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐