出现java.io.FileNotFoundException问题

来源:9-9 -数据清洗之ip地址解析

逍遥胖胖

2018-07-21

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回答

逍遥胖胖

提问者

2018-07-21

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

打开源码看到问题

//img.mukewang.com/szimg/5b52ccc50001252509420252.jpg

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

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

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

//img.mukewang.com/szimg/5b52cda00001f92409460174.jpg

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

//img.mukewang.com/szimg/5b52ce4f00013ca506240265.jpg

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

//img.mukewang.com/szimg/5b52cf240001916503680093.jpg

有什么不足,欢迎指出!

1
0

Michael_PK

2018-07-21

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

0
0

逍遥胖胖

提问者

2018-07-21

//img.mukewang.com/szimg/5b52ac3a00014f3507300196.jpg

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

0
0

以慕课网日志分析为例 进入大数据Spark SQL的世界

快速转型大数据:Hadoop,Hive,SparkSQL步步为赢

1644 学习 · 1129 问题

查看课程