博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Class.getResourceAsStream和ClassLoader.getResourceAsStream方法
阅读量:7308 次
发布时间:2019-06-30

本文共 1626 字,大约阅读时间需要 5 分钟。

项目中,有时候要读取当前classpath下的一些配置文件,下面介绍下Class.getResourceAsStream和ClassLoader.getResourceAsStream两种方法以及两者的区别。

1. Class.getResourceAsStream

首先, 我们必须先了解根路径“/”是如何定义的,这对我们使用getResourceAsStream准确加载文件是很重要的。

首先,我们要明白这个根路径是对应类所处类路径上的根目录!什么意思呢?假如一个项目经过编译之后生成了如下class文件和目录结构:

com     |-github            |-test            |    |-Test1.class            |    |-testdata1.txt            |-Test2.class            |-testdata2.tx2
在这样的编译输出目录下,文件"testdata1.txt"的绝对路径名为:"
/com/github/test/testdata1.txt" 文件"testdata2.txt"的绝对路径名为:"
/com/github/testdata2.txt"
如同getResourceAsStream方法文档上的解释:以/开头时是绝对路径,与类路径不同的是路径上的"."换成了"/"。

如果使用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

你可能感兴趣的文章
汇编总结:lea指令
查看>>
cobbler批量部署实验记录
查看>>
关于写日报
查看>>
我的友情链接
查看>>
新书试读_网络规划设计师考试考点分析与真题详解
查看>>
centos6.5安装openssh7.2p2方法
查看>>
ubuntu 13.04 root权限设置方法详解
查看>>
Iptables防火墙(一)
查看>>
使用nginx访问服务器log日志
查看>>
linux命令行抓取网页快照
查看>>
[免费赠票] 第九届中国云计算大会日程曝光
查看>>
完美spring boot 使用log4j2按级别输出到不同文件
查看>>
magento cron job
查看>>
Android Studio第二十六期 - 自定义Activity中Fragment之间的传值
查看>>
二、Windows Server 2008 R2 Hyper-V 创建虚拟机
查看>>
XPath 与 lxml
查看>>
PingingLab传世经典系列《CCNA完全配置宝典》-3.12 三层交换
查看>>
Svn 笔记—— 配置
查看>>
创建复选菜单和单选菜单
查看>>
swarm 部署高可用harbor
查看>>