java错误无法读取配置文件_解决Java Web项目无法读取配置文件问题

当Java Web项目在运行时无法读取配置文件,通常由于运行环境的不同导致路径引用错误。Java Application的根目录始于`target/classes`,而Java Web项目在服务器上的根目录始于`WEB-INF/classes`。解决方法是通过`Class.getResource()`获取资源路径,如`/db.properties`,以确保在不同环境下都能正确读取配置文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

错误描述

报错信息如下图所示,Web应用后台在读取配置文件的时候,系统找不到指定的路径。

73b9a0b3491cac5e6ac49d4f6bbe3114.png

这是Java Web项目的目录结构:

167dd77f8521465a22c698490c2d447a.png

这是报错部分的代码:

static {

try {

Properties prop = new Properties();

//读取配置文件

InputStream is = new InputStream("src/main/resources/db.properties");

//加载配置文件

prop.load(is);

driver = prop.getProperty("driver");

url = prop.getProperty("url");

user = prop.getProperty("user");

password = prop.getProperty("password");

} catch (Exception e) {

e.printStackTrace();

}

}

做出的尝试:

一般遇到这样的问题的时候,第一反应觉得是路径不小心打错了。于是找到db.properties文件鼠标右击,选择Copy Qualified Name,复制配置文件的路径确保路径的正确性,但是并没有解决这个问题。

既然路径没错还会报错,就让我感到很奇怪。于是,我在该类下写了一个main函数直接跑Java Application去连接数据库,万万没想到居然成功连接上了(即成功读取到了配置文件)。

报错原因:

由上诉第二点应该可以看出来了,其实还是路径的问题,当时做出了一个大胆的猜想:Java项目本地直接运行(Java Application)的根目录和Java Web项目在服务器上运行(Run on Service)的根目录是不同的!

在网上找了相关资料后,证实了我的猜想:

当点击运行Java Application时,项目的根目录是从target/classes开始的

31a0c13f623d0c49743058ebf5ad2c0f.png

当点击运行Run on Service时,项目的根目录是从WEB_INF/classes开始的

166facbbeb683176f3b1905c187e7e32.png

PS:至于为什么是这样,可以去了解一下.classpath文件,它用于记录项目编译环境的所有信息,包括:源文件路径、编译后class文件存放路径、依赖的jar包路径、运行的容器信息、依赖的外部project等信息。

问题解决

知道了出错原因是在路径问题上,那我们就把手动输路径改为通过Class获取资源路径。

获取路径的方法如下,如果给getResource()传入的是"",返回的是JDBCUtils类的路径;如果

传入的是"/",返回的是target/classes或WEB_INF/classes。

String url = JDBCUtils.class.getResource("/").getPath();

由上面的截图可以看到,配置文件db.properties是放在/class下的,所以要找路径的时候传入"/db.properties"参数即可。

InputStream is = new FileInputStream(JDBCUtils.class.getResource("/db.properties").getPath());

//等价于

InputStream is = JDBCUtils.class.getResourceAsStream("/db.properties");

进行上述更改后,报错信息消失了。我们来进行如下测试:

6a7f7cbccd32b117a044e55c282ee843.png

用Navicat打开数据表可以发现,注册信息已经成功插入表中!

50fd5cca6eb5d7559c5ed5cb411a1b4f.png

参考资料

一个合格的程序员,应该要善于发现问题。٩(๑>₃

点赞

1

收藏

分享

文章举报

dc0773d5981fcd9b5a48f91c7f0cf627.png

4a668feaa3018a2e1706f07e5002bcc8.png

VeggieOrz

发布了89 篇原创文章 · 获赞 652 · 访问量 70万+

私信

关注

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值