您的位置:首页 > 编程语言 > Java开发

Spring学习系列:错误记录(二) : 类路径和resource目录的关系

2017-08-15 22:01 477 查看

问题起因

今天在看书的时候看到Spring里资源访问部分,有个从类路径寻找资源文件的类叫做ClassPathResource,他的祖先类是Resource,可以从类路径跟目录寻找资源文件。但是在我写代码试验的时候发现总是找不到资源文件导致频频报错。

以上提到的类均是指spring 框架提供的

问题“解决”

后来我意识到我犯了一个大错误,这里的从类根目录加载文件指的是便宜好的存放.class文件的目录,而不是源文件类的目录(基础知识不扎实)。于是我尝试去读取.class文件

public class Demo {
public static void main(String[] args) {
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
Resource resource = new ClassPathResource("com/yeonon/Demo.class");
System.out.println(resource.exists());
}
}


结果返回的是True,但是如果我换成Demo.java,结果返回的就是False了,说明从“从类的路径查找文件”这句话的意思应该是从编译好的存放.class文件目录查找,这似乎解决了问题。

“风波再起”

现在我们是知道在哪里读取文件了,最直接的办法是把资源文件(例如beans.xml)放到编译好的目录中去,好像这就能解决问题了。但是,到时候程序发布的时候是不可能连同这个目录一起发布的,那该怎么办呢?这时候就要利用resources这个目录了(好像这是Spring建议创建的一个资源目录),将文件放入这个目录就能正确的读取文件了。

为什么能直接从resources目录读取,目前我不清楚是IDEA的功劳还是Spring的功劳。

最后

这次错误主要是不能理解“类路径下查找”这句话的意思,归根结底还是java基础不扎实。顺便说一下资源查找还有一种方法比较方便:

ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
Resource resource = resolver.getResource("classpath:beans.xml");


配个书上的图吧:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: