getResourceAsStream(“”)路径问题

本文详细解释了Java中通过Class对象及ClassLoader加载资源文件的三种方法,并对比了它们之间的路径差异,包括相对路径、绝对路径及工程根目录路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于

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

方法)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值