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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 什么是国际邮箱地址,如何登录域名邮箱?「建议收藏」

    什么是国际邮箱地址,如何登录域名邮箱?「建议收藏」互联网的高速发展,信息通讯的重要,邮箱已然变成不可或缺的通讯工具,TOM企业邮箱作为国内重要的邮箱厂商,一直为广大用户提供系统的邮箱服务。国际邮箱地址与国内都是同等格式,账号名称@域名组成通用的国际邮箱地址,下面给大家讲解如何注册域名邮箱并登录使用。如何注册域名邮箱?首先讲下域名邮箱的特点,域名邮箱是指用公司或者个人注册的域名,用来开通邮箱时使用的域名,其具有个性化、标志化的特点,在商务往来中更加突显正规性。注册完成将域名解析到邮箱服务商,开通的邮箱就能使用了。登录使用域名邮箱邮箱开通后,使用邮箱

    2022年9月24日
  • ThreadPoolTaskExecutor线程池参数配置

    ThreadPoolTaskExecutor线程池参数配置一、线程池配置1、ThreadPoolConfigimportorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.scheduling.annotation.EnableAsync;importorg.springframework.scheduling.concurrent.Threa

    2022年5月4日
  • HTML CSS 鼠标样式效果[通俗易懂]

    HTML CSS 鼠标样式效果[通俗易懂]HTML/CSS/JS目录:https://blog.csdn.net/dkbnull/article/details/87934939 <divstyle="cursor:hand">鼠标手型效果</div><divstyle="cursor:pointer">鼠标手型效果</div><!–pointer兼容性比较好

    2022年5月6日
  • golang 激活码 2021[在线序列号][通俗易懂]

    golang 激活码 2021[在线序列号],https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
  • Layui分页_pagehelper分页使用

    Layui分页_pagehelper分页使用本文介绍了LayUI分页,LayUI动态分页,LayUIlaypage分页,LayUIlaypage刷新当前页,分享给大家,具体如下:效果图:一、引用js依赖主要是jquery-1.11.3.min.js和layui.all.js,json2.js用来做json对象转换的二、js分页方法封装(分页使用模板laytpl)1、模板渲染/***分页模板的渲染方法*@paramtemp…

    2022年10月28日
  • 19种电压转换的电路设计方式

    19种电压转换的电路设计方式标准三端线性稳压器的压差通常是2.0-3.0V。要把5V可靠地转换为3.3V,就不能使用它们。压差为几百个毫伏的低压降(LowDropout,LDO)稳压器,是此类应用的理想选择。图1-1是基本LDO系统的框图,标注了相应的电流。从图中可以看出,LDO由四个主要部分组成:技巧一:使用LDO稳压器,5V向3.3V系统供电标准三端线性稳压器的压差通常是2.0-3.0V。要把5V可靠地转换为3.3V,就不能使用它们。压差为几百个毫伏的低压降(LowD…

    2022年6月2日

发表回复

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

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