关于class.getResourceAsStream(String name)与 class.getClassLoader().getResourceAsStream(String name)的路径
2016-06-27 17:50
513 查看
首先用类加载资源文件的方式可以有以下三种:
(包结构图)
1) InputStream inStream = 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会使用Bootstrap Loader去加载资源文件。所以路径还是这种相对于工程的根目录即"com/jdbc/dao/dao.properties"(不需要“/”)。
2. 第一种是采用的相对路径,资源文件相对于当前这个类即(DaoFactory类)的位置,这种方式Class对象做了一些处理。即resloveName(name)这个方法。最终name还是会转换成适合第三方式的name参数
3. 第二种是采用绝对路径,绝对路径是相对于classpath根目录的路径(工程里src目录对应bin目录(存放.class文件的目录))。
(Class类中resolveName方法)
(包结构图)
1) InputStream inStream = 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会使用Bootstrap Loader去加载资源文件。所以路径还是这种相对于工程的根目录即"com/jdbc/dao/dao.properties"(不需要“/”)。
2. 第一种是采用的相对路径,资源文件相对于当前这个类即(DaoFactory类)的位置,这种方式Class对象做了一些处理。即resloveName(name)这个方法。最终name还是会转换成适合第三方式的name参数
3. 第二种是采用绝对路径,绝对路径是相对于classpath根目录的路径(工程里src目录对应bin目录(存放.class文件的目录))。
(Class类中resolveName方法)
相关文章推荐
- iis7 运行 php5.5 的方法
- WebLogic中的一些基本概念(Domain ,Server ,Admin Server等)
- t
- Swift switch逻辑分支语句
- NTFS重解析点(Reparse Points)
- 常用Java的搜索引擎框架
- (OK) install_IBM_SERVER.txt
- 手把手教React Native实战开发视频教程【更新到40集啦。。。】
- UITableView优化
- GetKeyState和GetAsyncKeyState以及GetKeyboardState函数的用法与区别
- Android学习路线指南
- 处理输入框被键盘遮盖的问题
- 英语发音
- 关于按两次后退键退出app
- Java 读 Txt 返回 String
- window下mysql安装以及问题解决方法
- android studio 一些使用问题
- HoloWAN Recorder网络延迟丢包抖动测试工具,下载地址和使用方法
- EPC-6708 按键驱动
- Go语言学习:Channel