Class.getResourceAsStream(path)与Thread.currentThread().getContextClassLoader().getResourceAsStream

来源:互联网 发布:windows 10 dpi 编辑:程序博客网 时间:2024/05/18 03:42

Class.getResourceAsStream(Path)获取的是Class类所在的package下或者工程下,例如一个Student类所在jar目录或者工程目录为D;\myapp\com\bbs\Student.class则如果path为“"file.txt"即是Student.getResourceAsStream("file.txt")则将会搜索D:\myapp\com\bbs下的file.txt文件,此时当前目录就是D:\myapp\com\bbs。如果path为./file.txt结果相同,如果不存在则返回Null。如果是以"/"开头,java会认为是一个绝对路径,则会从classpath的顶级目录开始搜索,即是path为"/file.txt",此时搜索空间为D:\myapp,找到D:\myapp\file.txt文件。

Student.getClassLoader().getResourceAsStream(path)则不同,搜索空间是当前工程下的类路径下可以在程序启东时通过-classpath path1;path2来添加,path并且必须是相对路径,不可使用“”\“”开头.例如path为"./file.txt"或者“”file.txt“”,则将会在以工程目录为起点搜索,即是“”D:\myapp\file.txt“下,如果Path为"com\bbs"”则会在相对工程目录下的com\bbs下搜索file.txt。

Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName) :每一个Thread都有一个context classloader与之对应,这个contextloader类是由父进程提供的,默认的contextloader为父进程的context classloader。如果在整个Thread结构中,你都没有通过Thread类的构造函数初始化某个Thread 的context classloader的话,那么,整个Thread的context classloader都将默认是system classloader。

MethodParameter formatLookup failure behaviorUsage example

ClassLoader.

getResourceAsStream()

"/"-separated names; no leading "/" (all names are absolute)Silent (returns null)

this.getClass().getClassLoader()

.getResourceAsStream

("some/pkg/resource.properties")

Class.

getResourceAsStream()

"/"-separated names; leading "/" indicates absolute names; all other names are relative to the class's packageSilent (returns null)

this.getClass()

.getResourceAsStream

("resource.properties")

ResourceBundle.

getBundle()

"."-separated names; all names are absolute;.properties suffix is implied

Throws unchecked

java.util.MissingResourceException

ResourceBundle.getBundle

("some.pkg.resource")

参考(http://www.javaworld.com/article/2077352/java-se/smartly-load-your-properties.html)

参考(http://www.javaworld.com/article/2077344/core-java/find-a-way-out-of-the-classloader-maze.html)参考(https://www.ibm.com/developerworks/cn/java/j-lo-classloader/)

0 0
原创粉丝点击