className.class.getResourceAsStream()与ClassLoader.getSystemResourceAsStream() 的区别
来源:互联网 发布:一元云购源码干嘛用的 编辑:程序博客网 时间:2024/05/22 09:22
一: 要加载的文件和.class文件在同一目录下,例如:com.x.y 下有类Test.class ,同时有资源文件config.properties
那么,应该有如下代码:
//前面没有“/”代表当前类的目录
InputStream is1 = Test.class.getResourceAsStream("config.properties");
System.out.println(is1);// 不为null
第二:在Test.class目录的子目录下,例如:com.x.y 下有类Test.class ,同时在 com.x.y.prop目录下有资源文件config.properties
那么,应该有如下代码:
//前面没有“/”代表当前类的目录
InputStream is2 = Test.class.getResourceAsStream("prop/config.properties");
System.out.println(is2);//不为null
第三:不在同目录下,也不在子目录下,例如:com.x.y 下有类Test.class ,同时在 com.m.n 目录下有资源文件config.properties
那么,应该有如下代码:
//前面有“/”,代表了工程的根目录
InputStream is3 = Test.class.getResourceAsStream("/com/m/n/config.properties");
System.out.println(is3);//不为null
ClassLoader.getSystemResourceAsStream :
和className.class.getResourceAsStream 的第三种取得的路径一样,但少了“/”
InputStream is4 = ClassLoader.getSystemResourceAsStream("properties/PayManagment_Config.properties");
System.out.println(is4);//不为null
转载自:http://www.blogjava.net/icewee/archive/2012/05/04/377371.html
理解 Class.getResourceAsStream()
ClassLoader提供了两个方法用于从装载的类路径中取得资源:
public URL getResource(String name);
public InputStream getResourceAsStream(String name);
这里name是资源的类路径,它是相对与“/”根路径下的位置。getResource得到的是一个URL对象来定位资源,而
getResourceAsStream取得该资源输入流的引用保证程序可以从正确的位置抽取数据。
然而,程序中调用的通常并不是ClassLoader的这两个方法,而是Class的getResource和getResourceAsStream方法,因为Class对象可以从你的类得到(如YourClass.class或YourClass.getClass()),而ClassLoader则需要再调用一次YourClass.getClassLoader()方法,但根据JDK文档的说法,Class对象的这两个方法其实是“委托”(delegate)给装载它的ClassLoader来做的,所以只需要使用Class对象的这两个方法就可以了。
举例说明:
mypackage.Hello.class.getResourceAsStream("/config/config.ini");
从classpath下的config相对路径中读取config.ini
理解Tools.class.getClassLoader().getResourceAsStream(file):
首先,调用对象的getClass()方法是获得对象当前的类类型,这部分数据存在方法区中,而后在类类型上调用
getClassLoader()方法是得到当前类型的类加载器,在Java中所有的类都是通过加载器加载到虚拟机中的,而且类加
载器之间存在父子关系,就是子知道父,父不知道子,这样不同的子加载的类型之间是无法访问的(虽然它们都被放
在方法区中),所以在这里通过当前类的加载器来加载资源也就是保证是和类类型同一个加载器加载的。
最后调用了类加载器的getResourceAsStream()方法来加载文件资源
- className.class.getResourceAsStream()与ClassLoader.getSystemResourceAsStream() 的区别
- className.class.getResourceAsStream()与ClassLoader.getSystemResourceAsStream() 的区别
- className.class.getResourceAsStream()与ClassLoader.getSystemResourceAsStream() 的区别
- className.class.getResourceAsStream()与ClassLoader.getSystemResourceAsStream() 的区别
- className.class.getResourceAsStream()与ClassLoader.getSystemResourceAsStream() 的区别
- className.class.getResourceAsStream()与ClassLoader.getSystemResourceAsStream() 的区别
- className.class.getResourceAsStream()与ClassLoader.getSystemResourceAsStream() 的区别
- className.class.getResourceAsStream()与ClassLoader.getSystemResourceAsStream() 的区别
- java 路径、className.class.getResourceAsStream()、ClassLoader.getSystemResourceAsStream() 、FileInputStream
- java 路径、className.class.getResourceAsStream()、ClassLoader.getSystemResourceAsStream() 、FileInputStre
- ClassLoader.getSystemResourceAsStream与Class.getClassLoader().getResourceAsStream()
- Class.getResourceAsStream()与ClassLoader.getResourceAsStream()的区别
- ClassLoader.getResourceAsStream() 与 Class.getResourceAsStream()的区别
- ClassLoader.getResourceAsStream() 与 Class.getResourceAsStream()的区别
- ClassLoader.getResourceAsStream() 与 Class.getResourceAsStream()的区别
- ClassLoader.getResourceAsStream() 与 Class.getResourceAsStream()的区别
- Class.getResourceAsStream()与ClassLoader.getResourceAsStream()的区别
- java.lang.ClassLoader中方法getResourceAsStream与ClassName.class.ResourceAsStream方法两者路径的区别
- implicit declaration of function 'kzalloc' 解决方法
- 转子“知乎”--穷人如何成为富人
- 静夜随笔
- C语言库函数之 int vsnprintf(char *str, size_t size, const char *format, va_list ap);
- SVN搭建本地文件版本管理
- className.class.getResourceAsStream()与ClassLoader.getSystemResourceAsStream() 的区别
- [版本控制]如何在GitHub上下载自己喜欢的开源代码并提交修改
- 2013/08/19 C# WPF 学习笔记
- ExtJS做的一个信息管理界面
- ArrayList源码分析(基于JDK1.6)
- gridview两列数据的互换
- 在Excel的单元格中,调用VBA函数
- VC/MFC 编辑框里面字符串的存放方式
- javaSE1.6中的Synchronized(并发)