Class.getResourceAsStream和ClassLoader.getResourceAsStream
2016-04-01 17:31
309 查看
原文:/article/1404427.html
关于Class.getResourceAsStream
首先, 我们必须先了解根路径“/”是如何定义的,这对我们使用getResourceAsStream准确加载文件是很重要的。首先,我们要明白这个根路径是对应类所处类路径上的根目录!什么意思呢?假如一个项目经过编译之后生成了如下class文件和目录结构:
如同getResourceAsStream方法文档上的解释:以/开头时是绝对路径,与类路径不同的是路径上的“."换成了"/"。
接下着我们看相对路径!
首先我们必须明确“相对”路径总是指相对于当前class的路径!
例如,如果我们使用
InputStream is= A.class.getResourceAsStream("1.txt");
路径不是以/开头,说明这是一个相对路径,相对的是A.class这个文件,所以,这里的“1.txt”所指的正确位置是与A.class处于同一目录下的1.txt文件,这一文件是存在的,所引不会报错。
如果我们按相对路径的方式通过A去加载2.txt,则路径应该这样描述:
InputStream is= A.class.getResourceAsStream("../2.txt");
是的,用“.."表示上一级目录。
如果我们按相对路径的方式通过B去加载1.txt,则路径应该这样描述:
InputStream is= B.class.getResourceAsStream("demo/1.txt");
注意!demo前是没有/的,这是一个相对路径,是相对于B所在包下的demo子包里的1.txt文件,所以这个路径也是正确无误的!
关于ClassLoader.getResourceAsStream
class.getResourceAsStream最终调用是ClassLoader.getResourceAsStream
只是在这之前对参数进行了调整。如果参数已/开头,则去除/,否则把当前类的包名加在参数的前面。
在使用ClassLoader.getResourceAsStream时,路径直接使用相对于classpath的绝对路径,并且不能已 / 开头。
InputStream resourceAsStream = ClassLoader.getSystemResourceAsStream("com/github/demo/1.txt");
关于Class.getResourceAsStream
首先, 我们必须先了解根路径“/”是如何定义的,这对我们使用getResourceAsStream准确加载文件是很重要的。首先,我们要明白这个根路径是对应类所处类路径上的根目录!什么意思呢?假如一个项目经过编译之后生成了如下class文件和目录结构:
com |-github |-demo | |-A.class | |-1.txt |-B.class |-2.txt在这样的编译输出目录下,文件"1.txt"的绝对路径名为:"/com/github/demo/1.txt" 文件"2.txt"的绝对路径名为:"/com/github/2.txt"
如同getResourceAsStream方法文档上的解释:以/开头时是绝对路径,与类路径不同的是路径上的“."换成了"/"。
接下着我们看相对路径!
首先我们必须明确“相对”路径总是指相对于当前class的路径!
例如,如果我们使用
InputStream is= A.class.getResourceAsStream("1.txt");
路径不是以/开头,说明这是一个相对路径,相对的是A.class这个文件,所以,这里的“1.txt”所指的正确位置是与A.class处于同一目录下的1.txt文件,这一文件是存在的,所引不会报错。
如果我们按相对路径的方式通过A去加载2.txt,则路径应该这样描述:
InputStream is= A.class.getResourceAsStream("../2.txt");
是的,用“.."表示上一级目录。
如果我们按相对路径的方式通过B去加载1.txt,则路径应该这样描述:
InputStream is= B.class.getResourceAsStream("demo/1.txt");
注意!demo前是没有/的,这是一个相对路径,是相对于B所在包下的demo子包里的1.txt文件,所以这个路径也是正确无误的!
关于ClassLoader.getResourceAsStream
class.getResourceAsStream最终调用是ClassLoader.getResourceAsStream
只是在这之前对参数进行了调整。如果参数已/开头,则去除/,否则把当前类的包名加在参数的前面。
在使用ClassLoader.getResourceAsStream时,路径直接使用相对于classpath的绝对路径,并且不能已 / 开头。
InputStream resourceAsStream = ClassLoader.getSystemResourceAsStream("com/github/demo/1.txt");
相关文章推荐
- 结构体字节对齐
- 使用HTML5中的element.dataset操作自定义data-*数据
- 排序算法
- Xutils 如何增加TLS1.2的支持
- C#调用java的jar文件的方法(转)
- 执行命令行并等待完成(使用WaitForSingleObject达到目的)
- 先进先出集合queue
- iOS 9已下的获取APP进程信息
- Swift 学习记录(4)
- 神经视觉感知Perception Lecture Notes: LGN and V1
- View控件--ViewSwitcher
- C++作业1
- iOS 解析json串
- 用imageROI来增加某范围的像素
- 【JavaScript】前端插件
- 笔记:MD5
- Android fragment 重叠问题的解决方法
- javaScript中的数组篇——常用方法
- 在Android Studio中有六种依赖
- iOS多线程