正确使用Class.getResourceAsStream("")与Class.getClassLoader().getResourceAsStream("")

方法getResourceAsStream("")与getResource("")均常被用于获取编译路径下指定的配置文件,用法相似,下面以getResource("")为例展示其正确用法:

	/**
	 * 无package
	 */
	System.out.println(this.getClass().getResource("template.xml").getPath());//相对当前Class路径下的template.xml
	System.out.println(this.getClass().getResource("/template.xml").getPath());//classpath根路径下的template.xml
	System.out.println(this.getClass().getClassLoader().getResource("template.xml").getPath());//classpath根路径下的template.xml
	/**
	 * package
	 */
	System.out.println(this.getClass().getResource("package/template.xml").getPath());//相对当前Class路径/package路径下的template.xml
	System.out.println(this.getClass().getResource("/package/template.xml").getPath());//classpath根路径/package路径下的template.xml
	System.out.println(this.getClass().getClassLoader().getResource("package/template.xml").getPath());//classpath根路径/package路径下的template.xml
		

错误用法(注意斜杠):

	/**
	 * 无package
	 */
	System.out.println(this.getClass().getClassLoader().getResource("/template.xml").getPath());//classpath根路径下的template.xml
	/**
	 * package
	 */
	System.out.println(this.getClass().getClassLoader().getResource("/package/template.xml").getPath());//classpath根路径/package路径下的template.xml
		

注意:在Jar包中获取配置文件时,建议通过getResourceAsStream("")的方式编码。

JAVA基础普及:

Classloader 类加载器,用来加载 Java 类到 Java 虚拟机中。与普通程序不同的是。Java程序(class文件)并不是本地的可执行程序。当运行Java程序时,首先运行JVM(Java虚拟机),然后再把Java class加载到JVM里头运行,负责加载Java class的这部分就叫做Class Loader。

JVM本身包含了一个ClassLoader称为Bootstrap ClassLoader,和JVM一样,BootstrapClassLoader是用本地代码实现的,它负责加载核心JavaClass(即所有java.*开头的类)。另外JVM还会提供两个ClassLoader,它们都是用Java语言编写的,由BootstrapClassLoader加载;其中Extension ClassLoader负责加载扩展的Javaclass(例如所有javax.*开头的类和存放在JRE的ext目录下的类),ApplicationClassLoader负责加载应用程序自身的类。

当运行一个程序的时候,JVM启动,运行bootstrapclassloader,该ClassLoader加载java核心API(ExtClassLoader和AppClassLoader也在此时被加载),然后调用ExtClassLoader加载扩展API,最后AppClassLoader加载CLASSPATH目录下定义的Class,这就是一个程序最基本的加载流程。

Best Wishes For You!

时间: 2024-11-16 00:07:52

正确使用Class.getResourceAsStream("")与Class.getClassLoader().getResourceAsStream("")的相关文章

printf-scanf("%s",&a);与scanf("%s",a);的区别是什么? 为什么下面的两个都正确?

问题描述 scanf("%s",&a);与scanf("%s",a);的区别是什么? 为什么下面的两个都正确? 第一个 char a[1000]; scanf("%s",&a); printf("%sn",a); system("pause"); 第二个 char a[1000]; scanf("%s",a); printf("%sn",a); sys

请问 如何把ID值 正确的让这句sql = "select * from qiye where qiyeid ="&id语句查到 ID获取时<input type=text name="qiyeid" value="<%=rs("qiyeid")%&

问题描述 <%@Language=VBScript%><!--#includefile="conn.asp"--><%qc=LCase(request("qc"))dizhi=LCase(request("dizhi"))bianma=LCase(request("bianma"))xingzhi=LCase(request("xingzhi"))hangye=LCase(re

vs2012-求问,&amp;amp;quot;lnk1158 无法运行rc.exe&amp;amp;quot;错误怎么解决?

问题描述 求问,"lnk1158 无法运行rc.exe"错误怎么解决? 我用的VS2012,一直用的好好地,但是今天突然在编译x64程序的时候出现"lnk1158 无法运行rc.exe"错误.相同的win32程序则未出现此错误. 重装编译器和windows sdk之后无法解决,windows sdk路径应该正确.求问有没有什么解决方法. 解决方案 重装VS2012,看来是被SDK影响了rc.exe工具. 解决方案二: 或者卸掉SDK,直接用VS2012自带的rc.e

vs2012-展开刚创建的数据库,右键&amp;amp;quot;表&amp;amp;quot;,弹出菜单中无&amp;amp;quot;添加新表&amp;amp;quot;选项

问题描述 展开刚创建的数据库,右键"表",弹出菜单中无"添加新表"选项 解决方案 问题已解决,这种很明显是数据库安装出了问题,或者是SqlLocalDB或者是SQLEXPR_x64_CHS.总之解决方法如下:找一个用到Express的程序,你运行不通,系统会提示你少了什么东西你装就行了.或者简单一点,再装一次,确保正确安装就行了.时间过去好久了,我也忘了是怎么弄好的了...是我自己逗笔了 解决方案二: 很奇怪,关了重新开下,删除数据库连接,然后重新建立连接. 新建s

&amp;amp;quot;12345&amp;amp;quot;.equals(str)与str.equals(&amp;amp;quot;12345&amp;amp;quot;)有什么区别?

问题描述 "12345".equals(str)与str.equals("12345")有什么区别? 解决方案 解决方案二:如果当str为null的话"12345".equals(str)不会报空指针异常,而str.equals("12345")会报异常..解决方案三:楼上所说正解--解决方案四:引用1楼pl3121605999的回复: 如果当str为null的话"12345".equals(str)不会报

就想死个明白。在服务器上jsp没有&amp;amp;lt;base href=&amp;amp;quot;&amp;amp;lt;%=basePath%&amp;amp;gt;&amp;amp;quot;&amp;amp;gt;不能保存session

问题描述 在服务器上jsp没有<basehref="<%=basePath%>">不能保存session有了就一切正常.运维让我把<basehref="<%=basePath%>">删掉,导致我的session无法正常使用这到底是我的代码有问题还是服务器设置有问题,求解答!!让我死个明白 解决方案 解决方案二:额,删了后应该是请求路径出错了吧解决方案三:最好用相对路径吧就是路径不对,session就会失效?你把sess

&amp;amp;quot;package中的javac,java用法&amp;amp;quot; &amp;amp;amp;&amp;amp;amp; &amp;amp;quot;制作可执行jar文件&amp;amp;quot;

执行 java初学者最早会用的命令无非是就是javac和java,但即使这么简单命令也还会把我们弄得头皮发麻 -__- .Roger下面就"package中的javac,java用法"和"制作可执行jar文件"做点简单的解释. 最基础的东西就不废话了,至于package先讲讲我的理解,因为我觉得知道这点对于开发还是很有帮助的.举个例子说:有两个类Tom和Jerry同属于一个package--Partners //Tom.javapackage Partners;pu

新浪微博注册时提示&amp;quot;你所使用的IP地址异常&amp;quot;怎么办

  出现注册失败现象的原因是由于您的浏览器禁止了cookie,您可以通过设置浏览器可记录cookie的办法解决此问题.设置方法:点击IE浏览器的工具-internet选项-隐私 将级别设置为中,设置成功后再重新注册.

orcad pspice 16.6&amp;amp;quot;this application has quit unexpectly&amp;amp;quot;

问题描述 orcad pspice 16.6"this application has quit unexpectly" orcad pspice 16.6之前安装了并且成功破解了,用了一段时间之后突然在仿真运行时就出现"this application has quit unexpectly"卸了重装之后还是不行.不知道是怎么回事,求厉害的人物指导一下感激不尽. 解决方案 前几天有个同事问我一个问题,就是如何使用子线程打开PPTX文件.开始时我并没有觉得这是个什么