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 ...
随机推荐
- Ubuntu下配置jdk及maven等方法
从/etc/profile文件代码得知系统启动会把/etc/profile.d目录下面所有的.sh文件进行加载,如果在其中新建.sh文件用来设立环境变量等,系统启动后也会加载到它们.另外一种方法就是修 ...
- Discuz常见大问题-如何允许用户插入视频-如何自己在页面中插入视频
从视频的下面分享中获取html代码 然后粘贴到你创建页面的指定位置(注意从优酷复制的视频宽度和高度可能比较小,你可以自己调整,或者占据100%) 最终的实现效果
- Excel只能输入不许修改
昨天出差,用户有个需求:需要他人录入数据,为了防止已经录入的数据被修改(录入数据由多方完成),必须限定只能输入,不能修改(修改时需要密码),最开始的方案是各设置一个密码,但如果他们相互之间联合 ...
- IIS 之 Web 服务器上的 ASP.NET 进程模型设置
配置 Microsoft Internet 信息服务 (IIS) Web 服务器上的 ASP.NET 进程模型设置. processModel 节只能在 Machine.config 文件中进行设置, ...
- Java高并发syncronized深入理解
1.Synchronized的作用: 能够保证在同一时刻最多只有一个线程执行该段代码,以达到保证并发安全的效果. 2.地位: 1)Synchronized是java的关键字,并java的怨言原生支持: ...
- 【Linux】通过SSH修改调整Linux时间和时区
VPS(Virtual Private Server 虚拟专用服务器)技术,将一部服务器分割成多个虚拟专享服务器的一种服务.大多站长喜欢用美国的VPS,而美国的时间和时区和国内不同,那就需要通过SSH ...
- Hibernate(四)结构-基础语义和事务
一.基础语义 核心: Configuration SessionFactory Session 二.Configuration Configuration类负责管理Hibernate的配置信息,Hib ...
- more命令(转)
原文:http://www.cnblogs.com/peida/archive/2012/11/02/2750588.html more命令,功能类似 cat ,cat命令是整个文件的内容从上到下显示 ...
- 算法笔记_191:历届试题 大臣的旅费(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 很久以前,T王国空前繁荣.为了更好地管理国家,王国修建了大量的快速路,用于连接首都和王国内的各大城市. 为节省经费,T国的大臣们经过思考, ...
- 使用quartz进行容器启动时登陆接口服务器和接口服务器进行心跳连接
1.下载quartz的相应jar包 2.增加spring配置文件(applicationContext-quartz.xml) 内容如下: <?xml version="1.0&quo ...