虽然在源文件下,resources里的文件都在该文件夹下。但是在编译之后,类与资源文件都被打包到classes下,即根目录。因此在ide中可以读取的文件相对或者绝对路径在打包之后会失效。除此之外,通过classloader的getResource方法获取的路径也会失效。如果在服务器部署之后直接用该路径强行读取资源文件则会报错。
因此在打包到测试或者生产环境之后,由于resource路径的改变,要想获取模板文件,则需要先获取到文件再获取文件的路径。因此我们借助临时文件的方法达到我们的需求。具体而言,先通过Thread.currentThread().getContextClassLoader().getResourceAsStream()方法获取InputStream,再将其写入到File对象中,最后获取File路径作为模板的读取路径。