记一次FileNotFoundException异常

  同事提交了代码,就回去过春节了,今天,业务人员来说他昨天修改的东西有问题,要我处理。看了下日志,发现是这个很easy的异常

java.io.FileNotFoundException: \excel-templates\123 (系统找不到指定的路径。)

  看错误信息,就知道是xls的模版在服务器上没有被程序获取到,又看了下git上是有的,那绝壁是运维哥哥的锅了。

  果断吊运维去(这个docker环境下的项目,开发看不到服务器上的代码,没权限)

  运维排查了下,发现,服务器上是有xls模版的,又把问题丢给我了。

提交模版文件的项目错误

  奇了怪了,服务器上有模版的,git也有提交记录的,为什么会这样呢?

  带着疑惑的我,本地试了试,发现,也是会报错的,fileNotFoundException,心里顿时MMP,这太扯了吧,那哥们都不测的,就提交上去了?

  仔细看了下他的代码,发现,他本地是有测试的(因为本地测试代码还提交上去了的…),不过,他测的是磁盘绝对路径的方式,例如 “c://temp/abc.xls”,这种方式是没有问题的。

  但是,代码里实际使用,是使用classpath相对路径去取的,例如:”classpath:excel-templates/abc.xls”,我们项目是父子项目,他只在父项目提交了xls模版,没有在common项目里提交模版。

  问题定位了,在common里上传模版,本地测试,一切正常。

  ok,提交代码,线上重启。

ResourceUtils.getFile() 未获取预期值

  本以为没事了,结果,自测的时候,发现,仍然是报错的,错误信息仍然是 fileNotFoundException

  去服务器看了下,common下面的模版是存在的

  OMG,惊呆了,有点怀疑人生

  只能发动绝招了-面向谷歌编程

  但是,也没有收获到非常有价值的信息

  项目的代码,很简单的一行代码,使用到了spring的util类

public static FileInputStream getTemplates(String tempName) throws FileNotFoundException {
        return new FileInputStream(ResourceUtils.getFile("classpath:excel-templates/"+tempName));
}

曲线救国–更换获取模版方案

  无奈之下,只能曲线救国–换新的获取方式。使用getResourceAsStream的方式,结果,真的正常了…

  下面附上代码:

public static InputStream getTemplates(String tempName) {
    InputStream resourceAsStream = TemplateFileUtil.class.getResourceAsStream("/excel-templates/" + tempName);
    return resourceAsStream;
}

两者获取模版文件的差异是什么?

  这个得去深扒源码了,我太难了---

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值