请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

出现java.io.FileNotFoundException问题

java.io.FileNotFoundException: file:\E:\apache-maven-3.5.3\lib\com\ggstar\ipdatabase\1.0\ipdatabase-1.0.jar!\ipRegion.xlsx (文件名、目录名或卷标语法不正确。)

我的路径没有中文,并且我查了目录,确实有这个文件,在jar包里面有这个文件,我不知道jar!的感叹号是啥意思,是不是感叹号的原因,该怎么解决


正在回答 回答被采纳积分+3

3回答

提问者 逍遥胖胖 2018-07-21 14:14:28

在网上查阅,发现可能是打成jar包,文件在jar包里面,导致文件路径不能用,

打开源码看到问题

https://img1.sycdn.imooc.com//szimg/5b52ccc50001252509420252.jpg

源码中是使用getResource(ipFile)方法,但是这种方法在生成jar包后,java是无法读取文件路径,所以会出错

只能使用getResourceAsStream(ipFile)方法,这样获得的就是InputStream流,然后再把InputStream转换成BufferStream就可以使用了

同理,对ipRegion.xlsx也可以使用

https://img1.sycdn.imooc.com//szimg/5b52cda00001f92409460174.jpg

但这个有些不同,生成InputStream后,要运行getWorkBook(),这个方法传进去的参数是String类型的一个文件路径,于是可以进入到PoiUtil类中,修改getWorkbook方法,改变穿进去的参数类型

https://img1.sycdn.imooc.com//szimg/5b52ce4f00013ca506240265.jpg

把String类型改成InputStream类型,原本方法中是得到FileInputStream,然后在运行create方法,其实也是通过InputStream类型传过去的。(在WorkbookFactory类中可以看到)然后只要把create中的New FileInputStream(filePath)改成filepath,就可以运行了

https://img1.sycdn.imooc.com//szimg/5b52cf240001916503680093.jpg

有什么不足,欢迎指出!

1 回复 有任何疑惑可以回复我~
Michael_PK 2018-07-21 22:37:50

这个文件应该是一个resouces类型的目录的,你看下是否是resource类型的。感叹号就是去classpath下找

0 回复 有任何疑惑可以回复我~
提问者 逍遥胖胖 2018-07-21 11:45:45

https://img1.sycdn.imooc.com//szimg/5b52ac3a00014f3507300196.jpg

jar包里面也有这个文件,但是就是报错

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信