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");
转载于:https://www.cnblogs.com/lujiango/p/9674392.html
Class.getResourceAsStream和ClassLoader.getResourceAsStream方法相关推荐
- 1、ClassLoader.getResourceAsStream() 与Class.getResourceAsStream()的区别
1.ClassLoader.getResourceAsStream() 与Class.getResourceAsStream()的区别 例如你写了一个MyTest类在包com.test.mycode ...
- java getresources方法_Java ClassLoader getResources()方法与示例
ClassLoader类getResources()方法getResources()方法在java.lang包中可用. getResources()方法用于标识具有给定资源名称的所有资源. getRe ...
- ClassLoader.getResourceAsStream(name);获取配置文件的方法
1:报错如下 2:分析 3:解释 使用Spring的ClassPathResource来读取maven项目resource下的文件 一般来说,我们项目的配置文件及静态资源都会放置在resources目 ...
- 我的Java开发学习之旅------JAVA 笔记ClassLoader.getResourceAsStream() 与 Class.getResourceAsStream()的区别...
今天,一读者在我的 Android通过调用Webservice实现手机号码归属地查询 文章中给我回复了一个问题,由于没有具体说明我的sop12.xml文件是放在src目录下,不是和具体操作类Addre ...
- android防治方法被反射,通过去classLoader避免Android P反射限制后还原classLoader的方法...
[Java] 纯文本查看 复制代码/** * 恢复classloader:清除loader可能会造成问题 * (java.lang.NoClassDefFoundError: Class not fo ...
- java读取properties文件_java读取properties文件的几种方法
一.项目中经常会需要读取配置文件(properties文件),因此读取方法总结如下: 1.通过java.util.Properties读取 1 Properties p=newProperties() ...
- Java文件路径(getResource)
getResourceAsStream ()返回的是inputstream getResource()返回:URL Class.getResource("") 返回的是当前C ...
- java文件放在哪里_Java文件路径
几大常用的方法 Class.getResource("") 返回的是当前Class这个类所在包开始的位置 getClassLoader().getResource(" ...
- RCP 获得图片路径
Class.getResourceAsStream 和 ClassLoader.getResourceAsStream 这两个方法还是略有区别的, 以前一直不加以区分,直到今天发现要写这样的代码的时候 ...
最新文章
- jdk紧急漏洞,XMLDecoder反序列化攻击
- python import 路径_Python 从相对路径下import的方法
- 视不可当:信息图与可视化传播
- 月薪5万的产品经理都把什么能力放在第一位?
- 如何使用Database2Sharp进行代码生成
- mysql close 出错_MySQL错误Forcing close of thread的两种解决方法
- XML文档的使用方法
- 使用ECMAScript 5严格模式提升开发效率
- python实现QQ机器人(自动登录,获取群消息,发送群消息)
- ZZNUOJ_C语言1007:鸡兔同笼(完整代码)
- 图片去水印方法(不用下载任何东西)
- Shopee虾皮怎么发货?虾皮物流
- ReactOS 分析一
- 连连支付提现人民币的时候汇率是怎么样的?
- android 对话框 美化,Android修改Dialog样式
- 《我是一只IT小小鸟》目录I
- python逐步回归筛选变量_统计学干货 I 逐步回归
- 06_多窗口文档编辑器(小钱版)[Qt开发][2012-03-07]
- Java:反射机制学习
- 锐捷交换机的端口配置状态