运行Jar文件时遇FileNotFoundException的解决方案及原因咨询
问题解决方案
- 修正资源读取路径:将原路径
"resources/data.txt"修改为"/data.txt"(如果data.txt直接放在resources根目录下),代码示例:
若资源在resources的子目录中(比如InputStream inputStream = CustomTools.class.getResourceAsStream("/data.txt");resources/config/data.txt),则路径改为"/config/data.txt"。 - 确认资源被正确打包:打开IntelliJ的
Project Structure -> Artifacts,检查打包配置中resources目录已被包含,确保打包后文件会被放到Jar的根目录下。 - 可选:使用ClassLoader读取资源(无需前缀斜杠):
InputStream inputStream = CustomTools.class.getClassLoader().getResourceAsStream("data.txt");
差异原因分析
- IntelliJ运行时,项目的resources目录是类路径的一部分,此时文件系统中实际存在
resources/data.txt这个物理路径,所以原代码的路径能正常找到文件。 - 打包成Jar后,resources目录下的所有文件会被直接解压到Jar的根目录,Jar内部不存在
resources这个文件夹,原路径"resources/data.txt"对应Jar内的位置不存在,因此无法读取。
内容的提问来源于stack exchange,提问作者sathwikhbhat
相关产品推荐
相关产品推荐

