关于jar读取文件路径的这个问题可愁死我了!
(以下内容如有不准确,或错误的地方请留言.我会积极配合领导去查证并更正我的错误.)
先看项目树:(对应项目Open in Terminal — tree >>E:\tree.txt)
E:.
└─src
└─main
├─java
│ └─com
│ └─ycc
│ └─netty
│ ├─bean
│ ├─constant
│ └─util
└─resources
当我想把项目打成jar包并发布到服务器上的时候,它总是这样亲切的对我说:
An exception java.lang.IllegalArgumentException: bound must be positive
我苦思冥想,然后…….我就去google了…….
最终以这种方式解决了问题:
NameUtil.class.getClassLoader().getResourceAsStream(“surname.json”);
究其原因,其实是这个样子(…)
打包之后,jar包中的所加载的文件路径发生了变化,我们在把 ~.*(例如:test.json)打包到C盘之后,其路径变为file:/C:/*.jar!/~.*,如果你在原项目中使用new File(filePath)之类的方法来加载的话,肯定会找不到资源文件。主要是因为Jar包是一个单独的文件而非文件夹,绝对不可能通过file:/C:/.../*.jar!/~.*这种形式的文件URL来定位~.*。所以即使是相对路径,也无法定位到Jar包内的资源文件。
这个时候我们需要使用到getResource()和getResourceAsStream();