Web项目部署到Tomcat后找不到文件 java.io.FileNotFoundException: src/myPro.properties (No such file or directory)

3 篇文章 0 订阅
2 篇文章 0 订阅

BUG

Web项目用Tomcat部署之后,怎么都找不到properties文件?
你是否无数次在前端与TA邂逅
java.lang.NullPointerException
你是否无数次在后端与TA邂逅
java.io.FileNotFoundException: src/com/oracle/myPro.properties (No such file or directory)
仅运行Java就能找到properties,而一部署到汤姆猫上就找不到?!
先上解决方案,然后我们再分析分析

解决方法

ps:DBConnection是调用properties的类

1.适用于任何情况下查找properties文件

如果下述代码还不行的话,下拉找到解析2,绝对能解决
(因为博主用的是Mac系统且外接了硬盘,可能路径会有一点偏差)

Properties properties = new Properties();

String propertiesPath = Objects.requireNonNull(DBConnection.class.getClassLoader().getResource("myPro.properties")).getPath().replace("%20"," ");
properties.load(new FileInputStream(propertiesPath));

2.适用于任何情况下查找properties文件,但不适用于文件路径中有空格


Properties properties  = new Properties();
properties.load(DBConnection.class.getClassLoader().getResourceAsStream("db.properties"));

3.Java项目简单粗暴查找properties文件

右键propertise文件 --> copy --> Path From Content Path
右键propertise文件 --> copy --> Absolute Path
绝对路径和相对路径都行。
在这里插入图片描述


String propertiesPath = "src/com/laner/myPro.properties";
properties.load(new FileInputStream(propertiesPath));

4.web项目简单粗暴查找properties文件

这是真的被web项目下找propertise逼疯了忍无可忍深恶痛绝拍案而起才会用这个方法。且一定要注意你找文件的位置,不是在你编码的src文件夹下,而是在web项目编译后的文件夹下!
右键propertise文件 --> copy --> Absolute Path
在这里插入图片描述


String propertiesPath = "/Volumes/TOSHIBA EXT/Laner/JavaDT/classExerciseWeb1/date0811/out/artifacts/date0811_war_exploded/WEB-INF/classes/myPro.properties";
properties.load(new FileInputStream(propertiesPath));

解析

解析1:
这点可能大多数人都了解,web项目部署后文件位置不一样,所以不能单纯使用java编码时的路径。如果使用java编码时的路径你会发现单纯运行java时就能找到properties,而一部署到汤姆猫上就找不到。

解析2:
注意到第一点之后,我们就会使用类加载器getClassLoader去动态获取properties路径(也就是解决方案2)。有些人调到这一步就好用了,但是,有些倒霉蛋,比如博主我,就还是找不到。
经过对类加载器获取的路径 和copy出来的绝对路径对比,发现类加载器获取的路径中把文件夹中的空格" “替换成了“%20” ,所以才导致找不着。。。然后就把获取的路径.replace(”%20"," “)一下就好。
如果屏幕前的你使用.replace(”%20"," ")都不行的话,说明什么?
根据上述例子举一反三,文件路径中有特殊或特定的字符,被解析或翻译成其他意思,导致路径找不着。所以,输出绝对路径和类加载器获取的路径,进行比对,把不一样的地方通过replace改写即可。
绝对路径:右键propertise文件 --> copy --> Absolute Path
类加载器获取路径:DBConnection.class.getClassLoader().getResourceAsStream(“db.properties”)
ps:DBConnection是调用properties的类

总结

都说到这个地步了,不会还有倒霉蛋找不到propertise吧,如果真有的话,欢迎留言,一起探讨。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值