博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
对Class.getResourceAsStream和ClassLoader.getResourceAsStream方法所使用的资源路径的解释...
阅读量:6942 次
发布时间:2019-06-27

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

这是个非常基础的问题了,这里提供一些演示样例,帮助高速理解和记忆这个问题。
在该方法的文档: 中具体有描写叙述了它接收的路径是怎样定义的! 本文原文出处:  严禁不论什么形式的转载,否则将托付CSDN官方维护权益!
关于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");

你可能感兴趣的文章
英特尔布局FPGA未来:站稳脚步,整装待发!
查看>>
浅谈公安大数据的建设
查看>>
CA推全面云技术监控:帮助组织优化现代动态基础设施性能
查看>>
浅析云存储技术的发展现状和创新方向
查看>>
浪潮E7 v4服务器同步升级 为实时分析和内存计算优化
查看>>
身份管理是云计算运作的关键
查看>>
使用 Eureka 实现服务注册与发现
查看>>
《数学建模:基于R》——习题1
查看>>
如何通过CVE-2015-7547(GLIBC getaddrinfo)漏洞绕过ASLR
查看>>
SDN交换机在云计算网络中的应用场景
查看>>
超融合超越企业传统存储绕不开的六个问题
查看>>
深度剖析微服务架构的九大特征
查看>>
这八种方式教您最大提升网络带宽
查看>>
在自然语言处理、大数据、AI加持下,中译语通要“听每一条数据的心跳”
查看>>
最新安全报告:DDoS 攻击次数减少但是规模更大
查看>>
创业公司做数据分析(六)数据仓库的建设
查看>>
6招破解物联网产品开发安全性困境
查看>>
浅谈VR、AR、MR
查看>>
Linux systemctl 命令完全指南
查看>>
涨价停不下来?浅析SSD涨价的背后原因
查看>>