理解根目录,classpath, getClass().getResourceAsStream和getClass().getClassLoader().getResourceAsStream的区别
一: 理解根目录
<value>classpath*:/application.properties</value>
<value>classpath:/application.properties</value>

这里的classpath怎么理解呢,其实指的就是根目录,关于根目录,需要了解:
(1): src不是classpath, WEB-INF/classes,lib才是classpath,WEB-INF/ 是资源目录, 客户端不能直接访问。
(2): WEB-INF/classes目录存放src目录java文件编译之后的class文件、xml、properties等资源配置文件,这是一个定位资源的入口。
(3): 引用classpath路径下的文件,只需在文件名前加classpath:
<param-value>classpath:applicationContext-*.xml</param-value>
<!-- 引用其子目录下的文件,如 -->
<param-value>classpath:context/conf/controller.xml</param-value>
(4): lib和classes同属classpath,两者的访问优先级为: lib>classes。
(5): classpath 和 classpath* 区别:
classpath:只会到你的class路径中查找找文件;
classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找。
二:this.getClass().getResourceAsStream和this.getClass().getClassLoader().getResourceAsStream的区别
(1)关于getClass().getClassLoader()
InputStream is = this.getClass().getClassLoader().getResourceAsStream("helloworld.properties");
其中this.getClass()和getClassLoader()都是什么意思呀.?
getClass():取得当前对象所属的Class对象
getClassLoader():取得该Class对象的类装载器
public void readProperty(){
//从当前类所在包下加载指定名称的文件,getClass是到当前列
InputStream in = this.getClass().getResourceAsStream("biabc.properties");
// 从classpath根目录下加载指定名称的文件,这是因为/即代表根目录
// InputStream in = this.getClass().getResourceAsStream("/abc.properties");
//从classpath根目录下加载指定名称的文件,这是因为getClassLoader就会到根目录上
// InputStream in = this.getClass().getClassLoader().getResourceAsStream("abc.properties");
Properties properties = new Properties();
// 使用properties对象加载输入流
try {
properties.load(in);
} catch (IOException e) {
e.printStackTrace();
}
//获取key对应的value值
System.out.println(properties.getProperty( "a"));
}

文章摘自: https://blog.csdn.net/h2604396739/article/details/83860334
理解根目录,classpath, getClass().getResourceAsStream和getClass().getClassLoader().getResourceAsStream的区别的更多相关文章
- this.class.getClassLoader().getResourceAsStream与this.class.getResourceAsStream 文件地址获取
本文部分转自:http://xixinfei.iteye.com/blog/1256291 this.getClass().getClassLoader().getResource("tem ...
- this.class.getClassLoader().getResourceAsStream与this.class.getResourceAsStream
本文部分转自:http://xixinfei.iteye.com/blog/1256291 this.getClass().getClassLoader().getResource("tem ...
- this.class.getClassLoader().getResourceAsStream
this.getClass().getClassLoader().getResource("template"); 首先,调用对象的getClass()方法是获得对象当前的类 ...
- 有关getClassLoader().getResourceAsStream(fileName)、class.getResourceAsStream(fileName)和().getContextClassLoader().getResourceAsStream(fileName)的区别
一:前言 在自己获取属性时,碰见了XX.class.getResourceAsStream(fileName),自己对这个其实不是很理解,上网查了下资料,又看到了上述的几个,所以就研究了下. 二:内容 ...
- super.getClass()与this.getClass()
原文地址:http://leihuang.org/2014/11/14/getClass-method/ 首先看一段代码: import java.util.Date; public class Te ...
- this.getClass()和super.getClass()得到的是同一个类
今天dubug代码时发现this.getClass()和super.getClass()得到的竟然是同一个类,都是当前类. 遍访网络资料得出: getClass()不受this和super影响,而是有 ...
- 编写高质量代码改善C#程序的157个建议——建议28:理解延迟求值和主动求值之间的区别
建议28:理解延迟求值和主动求值之间的区别 要理解延迟求值(lazy evaluation)和主动求值(eager evaluation),先看个例子: List<, , , , , , , , ...
- InputStream in = JdbcUtil.class.getClassLoader().getResourceAsStream("dbinfo.properties");
1.与普通程序不同的是,Java程序(class文件)并不是本地的可执行程序.当运行Java程序时,首先运行JVM(Java虚拟机),然后再把Java class加载到JVM里头运行,负责加载Java ...
- 使用类加载器加载配置文件/getClassLoader().getResourceAsStream()
加载配置文件的两种方式; 1. 2. 两者相比,第一种方式更为方便,因为文件目录发生改变就会找不到.
随机推荐
- Teradata数据库访问链条
- TIPS FOR IMPROVING PERFORMANCE OF KAFKA PRODUCER
When we are talking about performance of Kafka Producer, we are really talking about two different t ...
- Go搭建后台服务学习记录
资料: 1. go基础 https://juejin.im/entry/58329f84da2f600063074382 https://www.w3cschool.cn/go/ 2.go的一个orm ...
- Android studio中布局文件出现render problem问题
当做layout时,可能会出现render problem的情况.意思就是无法预览当前布局页面,这种情况是因为API版本太高造成的.只需要修改API为更低版本即可.
- CCF-201803-3-URL映射(模拟)
Problem CCF-201803-3-URL映射 Time Limit: 1000 mSec Problem Description URL 映射是诸如 Django.Ruby on Rails ...
- [BJOI2015]树的同构
嘟嘟嘟 判断树的同构的方法就是树上哈希. 如果树是一棵有根树,那么只要从根节点出发dfs,每一个节点的哈希值等于按传统方式算出来的子树的哈希值的结果.需要注意的是,算完子树的哈希值后要先排序再加起来, ...
- Spring MVC Content Negotiation 转载
Spring MVC Content Negotiation 2017年11月15日 00:21:21 carl-zhao 阅读数:2983 Spring MVC有两种方式生成output的方法: ...
- 区分range() , np.arange() , np.linspace()
content: range() np.arange() np.linspace() 一.range(start, stop, step) 1.range() 为 python 自带函数 2.生成一个 ...
- P1865 A % B Problem
(一道很水的题) (反正我第一眼看的时候也是这么想的) 题目背景 题目名称是吸引你点进来的 实际上该题还是很水的 题目描述 区间质数个数 输入输出格式 输入格式: 一行两个整数 询问次数n,范围m 接 ...
- Python脱产8期 Day04 2019/4/16
流程控制 1.宏观一定是自上而下(逻辑上方代码一定比逻辑下方代码先执行):顺序结构2.遇到需要条件判断选择不同执行路线的执行方式:分支结构3.有些事情需要重复不断的去执行(当满足某种条件或不满足某种条 ...