FileNotFoundException: XXX (系统找不到指定的文件。)

目录

问题描述

问题分析

问题总结

240823补充


问题描述

idea引入文件,系统去读取,但是路径的问题报错系统找不到指定文件

String filePath = "test.txt";
try {
    FileInputStream fileInputStream = new FileInputStream(filePath);
} catch (FileNotFoundException e) {
    throw new RuntimeException(e);
}

文件位置如下,在service模块的resources下,当前业务代码也在service模块下

问题分析

找不到文件第一步先确认是项目中是否有这个文件

可以看到运行时打包是有这个文件的,所以排除这个原因

第二步,就是确定路径的问题了 

当前文件的绝对路径为: D:\Idea Project\phoenix\phoenix-service\src\main\resources\test.txt

已知的是,拿绝对路径是ok的,但现在问题是我们怎么找到当前文件的相对路径

经过测试,当前情况拿src/main/resources/test.txt 和 test.txt 测试都是失败的

了解到路径的相对路径是有基准的

相对路径的基准

在使用相对路径时,要了解它是相对于哪个基准目录的。一般来说,相对路径是相对于运行程序的当前工作目录的。

  • 如果你在 IDE 中运行程序,工作目录通常是项目的根目录。
  • 如果你从命令行运行程序,工作目录是你执行命令的目录。

此时意识到,当前单测代码位于phoenix-server模块,那么相对路径应该是从phoenix-server
模块的根目录下对应

所以将test.txt移到了phoenix-server模块下,此时该文件的绝对路径为:D:\Idea Project\phoenix\phoenix-server\src\main\resources\test.txt,读取文件成功,当前文件的相对路径为:src/main/resources/test.txt

问题总结

1. 首先确定文件是否存在

2. 其次相对路径是由基准的,是基于当前运行启动所在的模块的根目录去相对的

240823补充

按照上述方法,本地ok了,但是项目部署到服务器后,还是出现了找不到文件的报错,问题聚焦到了绝对路径上,如何获取一个文件的绝对路径?

String path = "src/main/resources/test.txt";
File file = new File(relativePath);
//方式1
String absolutePath = file.getAbsolutePath();

//方式2
String fileName = "test.txt";
String absolutePath = 当前类.class.getClassLoader().getResource(fileName).getPath();

最终通过以下方式获取到了文件的输入流

CouponQualificationClient.class.getClassLoader().getResourceAsStream(keystoreFullPath)
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值