SpringBoo项目打包部署Linux后访问不到 resources 下面的模板文件
1. Bug场景
1.1 在开发中经常需要获取资源文件路径,例如读写配置文件,获取resource下的模板文件等
1.2 Windows获取resource下的模板文件,在本地是可以直接获取模板文件并操作
// 第一中方式:getDefaultClassLoader已经过期了
// String path = ClassUtils.getDefaultClassLoader().getResource("static/" + templateFilePath).getPath();
// 推荐使用这种方式
String path = this.getClass().getClassLoader().getResource("static/template/Excel.xlsx").getPath();
FileInputStream fileInputStream = new FileInputStream(paths);
1.3 Linux获取resource下的模板文件,jar包明明是有模板文件但是报错找不到
2. Bug原因
意思读取不到jar包里面的文件,因为springboot是打包jar包,然后是执行运行的jar包,而不是读取的target下面编译好的文件。
由于 Windows 加载本地文件和 Linux 加载本地文件有区别,所以在加载本地文件时,使用方法有所不同。
3 解决方法:通过获取流的方式操作
3.1 Windows获取resource下的模板文件
// 第一中方式:getDefaultClassLoader已经过期了
// String path = ClassUtils.getDefaultClassLoader().getResource("static/" + templateFilePath).getPath();
// 推荐使用这种方式
String path = this.getClass().getClassLoader().getResource("static/template/Excel.xlsx").getPath();
FileInputStream fileInputStream = new FileInputStream(paths);
3.2 Linux获取resource下的模板文件
InputStream resourceAsStream = this.getClass().getClassLoader().getResourceAsStream("static/template/Excel.xlsx");