1.前言
为什么要写这篇文章?
身为Java程序员你有没有过每次需要读取 ClassPath 下的资源文件的时候,都要去百度一下,然后看到下面的这种答案:
Thread.currentThread().getContextClassLoader().getResource("ss.properties").getPath();
亦或是:
Object.class.getResourceAsStream("ss.properties");
你复制粘贴一下然后放到自己的项目里运行,还真跑起来了。但是当打成 jar 包作为其它项目的依赖时,或者打成 war 包被 Tomcat 加载时,你还能保证你的resources 资源文件被读取到吗?
答案是不能的。
其中的原因如何而又如何解决,怎样才能写出万无一失根本不用担心任何环境的代码?下面我会一一道来。
2.再看类加载机制
看到这个标题你也许会有些意外,不是说的读取ClassPath下的文件吗?为什么要讲类加载机制。
那你有没有想过,ClassPath下的资源文件标准存放的是什么?
顾名思义,是 .class 类文件。为什么我们的类可以被正确加载到Java虚拟机(JVM),而自己添加的资源文件却加载失败呢