Class.getResourceAsStream和ClassLoader.getResourceAsStream方法
项目中,有时候要读取当前classpath下的一些配置文件,下面介绍下Class.getResourceAsStream和ClassLoader.getResourceAsStream两种方法以及两者的区别。
1. Class.getResourceAsStream
首先, 我们必须先了解根路径“/”是如何定义的,这对我们使用getResourceAsStream准确加载文件是很重要的。
首先,我们要明白这个根路径是对应类所处类路径上的根目录!什么意思呢?假如一个项目经过编译之后生成了如下class文件和目录结构:
com
|-github
|-test
| |-Test1.class
| |-testdata1.txt
|-Test2.class
|-testdata2.tx2
如果使用eclipse,则如图:

则classes这个目录下面为根目录。
相对路径:相对”路径总是指相对于当前class的路径。
例如:
InputStream is= Test1.class.getResourceAsStream("testdata1.txt");
路径不是以/开头,说明这是一个相对路径,相对的是Test1.class这个文件,所以,这里的“testdata1.txt”所指的正确位置是与Test1.class处于同一目录下的testdata1.txt文件,这一文件是存在的,所引不会报错。
如果我们按相对路径的方式通过Test1去加载testdata2.txt,则路径应该这样描述:
InputStream is= Test1.class.getResourceAsStream("../testdata2.txt");
用“.."表示上一级目录。
如果我们按相对路径的方式通过Test2去加载testdata1.txt,则路径应该这样描述:
InputStream is= Test2.class.getResourceAsStream("test/testdata1.txt");
注意:test前是没有"/"的,这是一个相对路径,是相对于Test2所在包下的test子包里的testdata1.txt文件,所以这个路径也是正确无误的。
不以"/"开头时默认是从此类所在的包下取资源,以"/"开头则是从ClassPath(Src根目录)根下获取。
2. ClassLoader.getResourceAsStream
Class.getResourceAsStream最终调用是ClassLoader.getResourceAsStream
在使用ClassLoader.getResourceAsStream时,路径直接使用相对于classpath的绝对路径,默认是从ClassPath根下获取,并且不能以"/"开头。
有以下规则:
1. 如果参数以"/"开头,则去除"/"。
2. 否则把当前类的包名加在参数的前面。
InputStream resourceAsStream = ClassLoader.getSystemResourceAsStream("com/github/demo/1.txt");
Class.getResourceAsStream和ClassLoader.getResourceAsStream方法的更多相关文章
- 对Class.getResourceAsStream和ClassLoader.getResourceAsStream方法所使用的资源路径的解释
这是个非常基础的问题了,这里提供一些演示样例,帮助高速理解和记忆这个问题. 在该方法的文档:http://docs.oracle.com/javase/7/docs/api/java/lang/Cla ...
- Class.getResourceAsStream() VS. ClassLoader.getResourceAsStream()
For Class.getResourceAsStream(String name), if the name parameter doesn't start with a "/" ...
- Class.getResourceAsStream()与ClassLoader.getResourceAsStream()的区别
Class.getResourceAsStream() 会指定要加载的资源路径与当前类所在包的路径一致. 例如你写了一个MyTest类在包com.test.mycode 下,那么MyTest.clas ...
- Class.getResourceAsStream()与ClassLoader.getResourceAsStream()获取资源时的路径说明
Class.getResourceAsStream(): com.xusweeter.iot.ws.vodafone.config.VodafoneServiceConfig.class.getRes ...
- class getResourceAsStream 和 classloader getResourceAsStream获取资源的不同
工程目录结构: prj(工程根目录) cn json classloader GetResourceByClassAndClassLoader.Java beans.xml /** * */ pack ...
- ClassLoader.getResourceAsStream(name);获取配置文件的方法
ClassLoader.getResourceAsStream(name);路径问题 InputStream in = getClass().getResourceAsStream('/'+" ...
- classLoader.getResourceAsStream中文乱码
一直用一个方法安然无恙,今天在新项目中突然乱码了,原代码: ClassLoader classLoader = Thread.currentThread().getContextClassLoader ...
- 1、ClassLoader.getResourceAsStream() 与Class.getResourceAsStream()的区别
1.ClassLoader.getResourceAsStream() 与Class.getResourceAsStream()的区别 例如你写了一个MyTest类在包com.test.mycode ...
- JAVA 笔记 ClassLoader.getResourceAsStream() 与 Class.getResourceAsStream()的区别
Class.getResourceAsStream() 会指定要加载的资源路径与当前类所在包的路径一致. 例如你写了一个MyTest类在包com.test.mycode 下,那么MyTest.c ...
随机推荐
- Android面试总结经
自上周怒辞职以后,就開始苦逼的各种面试生涯,生活全然靠私活来接济,时有时没有,真难.还能快乐的玩耍吗.最多一天面试了5家,哎感觉都是不急招人,各种等待通知.好不easy等来一家.还克扣了薪资,从我要的 ...
- C#.NET常见问题(FAQ)-如何清空stringbuilder
就红色的代码可以: System.Text.StringBuilder sb = new System.Text.StringBuilder(); sb.Append("hello" ...
- Edge/Chrome/火狐/Safari/Opera和IE
据DigitalTrends网站报道,谷歌Chrome浏览器性能远超竞争对手的时代已经成为过去.目前流行的浏览器水平基本相当.IE 11被Windows 10中的Edge浏览器取而代之.Mozilla ...
- Ubuntu vim+ ctags(包括系统函数) + taglist 配置
阅读大型代码,我们常常须要打开非常多的代码文件,搜索各种定义.windows下用惯了ide的朋友.转战Linux的时候可能会认为非常难受,找不到合适的阅读工具. 事实上万能的vim就能够实现. 以下介 ...
- Drupal administration theme
Drupal允许为管理后台设置独立的theme,保存在系统变量variable_get('admin_theme'). Drupal使用全局变量$theme来保存当前请求对应的主题.Drupal在启动 ...
- iOS- 非整星的评分控件(支持小数)
概述 订单评论里实现星级评分控件: 简单整星评价与非整星的精评价. 详细 代码下载:http://www.demodashi.com/demo/10711.html 现在很多应用都有评分功能. 有了订 ...
- Android学习之Menu
1.普通的Menu 在Activity中覆盖onCreateOptionsMenu(Menu menu)方法,该方法负责生产menu,它是一个回调函数,即当按下手机设备上的menubutton时And ...
- maven依赖导致包重复加载及冲突
maven中配置 pom时,有时配置添加一个 jar却会自动导入多个 jar包,往往这些自动导入的 jar包会与我们项目中已存在的 jar包重复,从而导致冲突.由于这些 jar包不是我们自己配置的,所 ...
- 【mysql】Innodb三大特性之double write
1.doublewrite buffer(mysql官方的介绍) InnoDB uses a novel file flush technique called doublewrite. Before ...
- 获取JSON格式的字符串各个属性对应的值
{"lastrdtime":1515998187379,"creditbalance":"$5.00","contactmode& ...