项目场景:
web项目,本地开发没问题,打包部署到服务器后,资源文件读取不到报错。
报错:URI is not hierarchical
问题描述
报错:URI is not hierarchical
ClassPathResource resource = new ClassPathResource(zzz.txt);
File file = resource.getFile(); //报错:URI is not hierarchical
原因分析:
资源文件zzz.txt打包后会打在xxx.jar\BOOT-INFO\lib\yyy.jar\zzz.txt,而系统默认会去找xxx.jar\BOOT-INFO\classes\位置,jar中jar的文件以File file = new File(filePath)的方式是读取不到的。
解决方案:
两种解决方案:
一. 打包后将文件手动复制到系统能找到的位置:xxx.jar\BOOT-INFO\classes\zzz.txt
二. 将文件以输入流方式读取,可以读取到文件流
方法一就不介绍了,说一下方法二:
ClassPathResource resource = new ClassPathResource(zzz.txt);
InputStream is = resource.getInputStream();
// 其他操作
// is...
优缺点对比:
优点 | 缺点 | |
方法一 | 简单粗暴,不用改代码 | 每次打包都要记着放进去 |
方法二 | 所有环境通用,一次编译,到处运行 | 以输入流的形式获取资源,需要转换为你要的类型 |
总结:
综上所述,还是改代码可靠,以后直接用方法二就行了