getResourceAsStream(“”)路径问题

来源:互联网 发布:黑色五叶草 知乎 编辑:程序博客网 时间:2024/05/29 03:49

关于

class.getResourceAsStream(String name)

 

class.getClassLoader().getResourceAsStream(String name)

的路径

name

问题

 

 

 

首先用类加载资源文件的方式可以有以下三种:

 

(包结构图)

 

1)   InputStream inStream = 

DaoFactory.

class

.getResourceAsStream("dao.properties"); 

2)   inStream=DaoFactory.

class

.getResourceAsStream("/com/jdbc/dao/dao

.properties") 

3)

   inStream=DaoFactory.

class

.getClassLoader().getResourceAsStream("

com/jdbc/dao/dao.properties"); 

第一种和第二种方式是采用

Class

对象去加载,

第三种采用

ClassLoader

对象去加

载资源文件,之所以

Class

对象也可以加载资源文件是因为

Class

类封装的

ClassLoader

getResourceAsStream

方法。从

Class

类中的源码中可以看出:

 

 

之所以这样做无疑还是方便客户端的调用,省的每次获取

ClassLoader

才能加载

资源文件的麻烦。

 

路径问题:

 

1.

         

第三种是最本质的做法,前两种也是基于第三种去实现的。

JVM

使用

Bootstrap Loader

去加载资源文件。所以路径还是这种相对于工程的根目

录即

"com/jdbc/dao/dao.properties"

(

不需要“/”)。

 

2.

         

第一种是采用的相对路径,资源文件相对于当前这个类即

DaoFactory

类)的位置,这种方式

Class

对象做了一些处理。即

resloveName

name

)这个方法。最终

name

还是会转换成适合第三方式的

name

参数

 

3.

         

第二种是采用绝对路径,绝对路径是相对于

classpath

根目录的路径

(工程里

src

目录对应

bin

目录(存放

.class

文件的目录))。

 

 

Class

类中

resolveName

方法)


0 0
原创粉丝点击