赞
踩
今天研究Spring源码中Resource的时候,用到其工具类ResourceUtils其中的getFile(String resourceLocation)。发现了Class和ClassLoader的这两个方法。先把我的工程目录贴到这儿吧,如下图:
Java代码如下:
以上都是运行结果正确的,输出如下:
但是如果我把ResourceTest_zh_CN.properties剪切到resource目录下,无论怎么执行都报FileNotFoundException。看了一下ResourceUtils的源代码:
从上可以看出ResourceUtils是通过ClassLoader的getResource方法来取得文件的。这儿岔开话题一下,可以注意到Class也有getResource和getResourceAsStream方法,这两个有什么区别呢?用代码来说话吧,先看一下目录图如下:
代码如下:
这样输出结果正确,显然ClassLoader和Class的两个方法的区别一看便知,它们相对路径不一样,Class是把class文件所在的目录做为根目录,ClassLoader是把加载所有classpath的目录为根目录,也就是“..../classes”。
好,回到Spring的代码,如果把ResourceTest_zh_CN.properties剪切到resource目录下,而且要第一段代码执行正确的话,我们可以这样修改(上面的Class和ClassLoader的两个方法的对比已经很清楚),更改代码如下就可以了:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。