由于业务需要,在 SpringBoot 项目下的 resources 目录需要放一个 docx 文件,并进行读取,本来采用的 Spring 提供的 ResourceUtil 进行读取,本地测试正常,在服务器打成 jar 包后,发现文件读取不到,代码如下:
File fileTemplate = org.springframework.util.ResourceUtils.getFile("classpath:AnalyseTemplate.docx");
查了之后,发现在 jar 包中需要使用 inputStream 进行读取,于是修改代码如下即可:
ClassPathResource res = new ClassPathResource("AnalyseTemplate.docx");
InputStream fileTemplate = res.getInputStream();
在网上查询了一下,原因可能如下: 在 jar 包中的所有文件没有一个具体的路径,使用 ClassPathResource 的话,会初始化一个类加载器,并将项目中用到的所有路径都加载到类加载器中,那么去获取资源的话,会去这所有的路径中都进行寻找,因此可以找到文件,总之还是文件路径的原因