您的位置:首页 > 其它

关于class.getResourceAsStream() 与class.getClassLoader().getResourceAsStream()区别

2017-05-20 14:04 375 查看
首先用类加载资源文件的方式可以有以下三种: (包结构图) 



 

 

1)InputStreaminStream=DaoFactory.class.getResourceAsStream("dao.properties"); 

​2)inStream=DaoFactory.class.getResourceAsStream("/com/jdbc/dao/dao.properties") 

3)inStream=DaoFactory.class.getClassLoader().getResourceAsStream("com/jdbc/dao/dao.properties"); 

第一种和第二种方式是采用Class对象去加载,第三种采用ClassLoader对象去加载资源文件,之所以Class对象也可以加载资源文件是因为Class类封装的ClassLoader的getResourceAsStream方法。从Class类中的源码中可以看出: 





​​之所以这样做无疑还是方便客户端的调用,省的每次获取ClassLoader才能加载资源文件的麻烦。


路径问题:

1. 第三种是最本质的做法,前两种也是基于第三种去实现的。JVM会使BootstrapLoader去加载资源文件。所以路径还是这种相对于工程的根目录即"com/jdbc/dao/dao.properties"(不需要“/”)。 

2. 第一种是采用的相对路径,资源文件相对于当前这个类即(DaoFactory类)的位置,这种方式Class对象做了一些处理。即resloveName(name)这个方法。最终name还是会转换成适合第三方式的name参数 

3. 第二种是采用绝对路径,绝对路径是相对于classpath根目录的路径(工程里src目录对应bin目录(存放.class文件的目录))。 





 

(Class类中resolveName方法)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐