getResourceAsStream和getClassLoader

getResourceAsStream和getClassLoader1. Class.getResourceAsStream(Stringpath):path不以’/’开头时默认是从此类所在的包下取资源,以’/’开头则是从ClassPath根下获取。其只是通过path构造一个绝对路径,最终还是由ClassLoader获取资源。 2.Class.getClassLoader.getResourceAsStream(Stringpath):默认则

大家好,又见面了,我是你们的朋友全栈君。

1. Class.getResourceAsStream(String path) : path 不以’/’开头时默认是从此类所在的包下取资源,以’/’开头则是从ClassPath根下获取。其只是通过path构造一个绝对路径,最终还是由ClassLoader获取资源。 

2. Class.getClassLoader.getResourceAsStream(String path) :默认则是从ClassPath根下获取,path不能以’/’开头,最终是由ClassLoader获取资源。 

3. ServletContext. getResourceAsStream(String path):默认从WebAPP根目录下取资源,Tomcat下path是否以’/’开头无所谓,当然这和具体的容器实现有关。 

4. Jsp下的application内置对象就是上面的ServletContext的一种实现。 

其次,getResourceAsStream 用法大致有以下几种: 
第一: 要加载的文件和.class文件在同一目录下,例如:com.x.y 下有类me.class ,同时有资源文件myfile.xml 
那么,应该有如下代码: 
me.class.getResourceAsStream(“myfile.xml”); 
第二:在me.class目录的子目录下,例如:com.x.y 下有类me.class ,同时在 com.x.y.file 目录下有资源文件myfile.xml 
那么,应该有如下代码: 
me.class.getResourceAsStream(“file/myfile.xml”); 

第三:不在me.class目录下,也不在子目录下,例如:com.x.y 下有类me.class ,同时在 com.x.file 目录下有资源文件myfile.xml 
那么,应该有如下代码: 
me.class.getResourceAsStream(“/com/x/file/myfile.xml”); 
可能只是两种写法 
第一:前面有 “   / ” 
“ / ”代表了工程的根目录,例如工程名叫做myproject,“ / ”代表了myproject 
me.class.getResourceAsStream(“/com/x/file/myfile.xml”); 
第二:前面没有 “   / ” 
代表当前类的目录 
me.class.getResourceAsStream(“myfile.xml”); 
me.class.getResourceAsStream(“file/myfile.xml”); 
最后,自己的理解: 
getResourceAsStream读取的文件路径只局限与工程的源文件夹中,包括在工程src根目录下,以及类包里面任何位置,但是如果配置文件路径是在除了源文件夹之外的其他文件夹中时,该方法是用不了的。ClassLoader提供了两个方法用于从装载的类路径中取得资源:
public URL getResource(String name);
public InputStream getResourceAsStream(String name);
这里name是资源的类路径,它是相对与“/”根路径下的位置。getResource得到的是一个URL对象来定位资源,而getResourceAsStream取得该资源输入流的引用保证程序可以从正确的位置抽取数据。
然而,程序中调用的通常并不是ClassLoader的这两个方法,而是Class的getResource和getResourceAsStream方法,因为Class对象可以从你的类得到(如YourClass.class或YourClass.getClass()),而ClassLoader则需要再调用一次YourClass.getClassLoader()方法,但根据JDK文档的说法,Class对象的这两个方法其实是“委托”(delegate)给装载它的ClassLoader来做的,所以只需要使用Class对象的这两个方法就可以了。
举例说明:
mypackage.Hello.class.getResourceAsStream(“/config/config.ini”);
classpath下的config相对路径中读取config.ini

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/133098.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java编程app_如何用java开发app

    java编程app_如何用java开发app前言本人是底层211本科,刚毕业,⽆科研经历,但是有些项⽬经历。在国内监控行业某头部企业做过一段时间的实习。想着投下字节,可以积累⼀下⾯试经验和为金九银十面招做准备。投了简历之后,过了一段时间,HR就打电话跟我约时间,说明一下,我投的是北京office。以下就是一个面试的全部过程,分享出来给感兴趣的朋友们一看。阿里的人才画像其实最近两年自己一直在做面试官,也面试过很多优秀的人,心里大概有一个标准,知道什么样的人才是我们想要的人。但是这个标准我一直都没有仔细的去思考过,刚好最近有时间

    2022年9月23日
    3
  • Linux CentOS完全卸载PHP

    Linux CentOS完全卸载PHP

    2021年10月26日
    42
  • 需求分析之数据流图学习

    很实在的文章,原文转自http://blog.csdn.net/gashero/article/details/1230185以前眼里的软件工程,虽然重要,但是却一直不太了解其用处到底有多大。现在开始渐渐接触大工程了,才开始真正体验到软件工程的威力。没有好的需求分析,软件等于白做;没有好的系统设计,做了也要重做。在大型软件中,人的因素越来越大,远远超过技术的因素。比如,一些ERP系统的

    2022年4月15日
    58
  • linux安装pycharm全部过程「建议收藏」

    linux安装pycharm全部过程「建议收藏」一,安装文件传到虚拟机里在安装包目录下打开管理员小黑窗(安装包我会放在分享里,可以免费下载)scppycharm-community-2018.2.4.tarayh@192.168.66.130注:scp传输文件//pycharm-community-2018.2.4.tar文件名ayh为虚拟机名字//192.168.66.13…

    2022年10月19日
    6
  • JS截取字符串方法实例

    JS截取字符串方法实例

    2021年11月3日
    37
  • 人性的弱点

    1.与人相处的基本技巧永远不要尖锐地斥责别人斥责百害无一利,控制自己或则试着帮助他真诚地赞美他人激发他人的强烈需求2.如何让他人喜欢你真诚地关心他人微笑待人记住他人的名字善于倾听

    2021年12月30日
    29

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号