jar包部署后,读取resources目录下文件报FileNotFoundException:(No such file or directory)

一、问题场景

最近遇到一个很奇怪的问题,放在资源目录下的文件,在本地跑的时候能正常获取,打jar包后部署在服务器上时就会报FileNotFoundException,这种本地跑和服务器上运行结果不一样的问题往往最让人绝望,当你周五下班前信誓旦旦的和领导说任务完成了,第二天领导打电话让你来加班 ???

二、问题发现

之前的代码逻辑为:先获取资源文件的路径,再通过该路径读取文件

String templatePath = PDFServiceImpl.class.getClassLoader().getResource("pdfResources/cpxys.pdf").getPath();
    
PdfReader reader = new PdfReader(templatePath);

查看报错日志后,发现在服务器上调用该方法读取资源文件的路径是这样:
resources目录下-FileNotFoundException
看到报错路径后瞬间就明白了。服务器上的代码在获取资源目录下的文件路径时会带有jar包路径,这个路径显然是不对的,如果用这个路径去获得文件当然就找不到啦。

而在本地debug调试中,可以发现获得的路径是正确的:
本地调试资源文件路径

三、解决办法

修改后代码逻辑:通过文件输入流的方式读取文件,这样就不存在路径的问题了。

 InputStream templateInputStream = PDFServiceImpl.class.getClassLoader().getResource("pdfResources/cpxys.pdf").openStream();

 PdfReader reader = new PdfReader(templateInputStream);
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在你的问题中,ENOENT: no such file or directory open 是一个错误提示,意思是没有找到该文件目录。根据引用的内容,这个错误可能是由于在文件上传功能中未找到指定的文件目录导致的。为了解决这个问题,你可以按照引用中的建议,检查项目的根目录下是否存在public/upload这个路径,如果没有的话,你可以手动创建这个文件夹。另外,引用指出了一个可能的解决方案,将mkdir() 改成mkdirs(),这样可以创建多层文件夹。通过这些处理,你应该能够解决这个错误并成功进行文件上传。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [【已解决】ERROR: ENOENT: no such file or directory,open](https://blog.csdn.net/m0_51749295/article/details/127860877)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [FileNotFoundException: open failed: ENOENT (No such file or directory) 问题解决方案](https://download.csdn.net/download/weixin_38685832/14016746)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值