错误描述

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

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

这是报错部分的代码:

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开始的

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

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");

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

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

参考资料

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

点赞

1

收藏

分享

文章举报

VeggieOrz

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

私信

关注

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

  1. java打印args的内容_解决java main函数中的args数组传值问题

    这几天面试中有遇到关于main数组中的args数组传值的问题,一般是从命令提示符中传值,也可以直接在java代码中赋值. 而且这个数组的长度是动态的,根据传值的个数确定数组的长度. 1.从命令提示符中 ...

  2. java编码gbk的不可_解决 java “错误:编码GBK 的不可映射字符”

    在cmd控制台编译时报错:编码GBK的不可映射字符 检查: 1. 查本机区域语言设置中文没有问题 2. 此程序可以在eclipse上正常运行 右键properties-resource-text fi ...

  3. java键盘监听延迟_解决JAVA键盘监听的延迟现象以及八个方向的运动

    首先解释一下键盘出现延迟的原因: 其实键盘为了用户体验,在按下一次按键之后,会有片刻的延迟,为什么会这样呢? 你想一下,当你打一个字母时,连着出来了好几个字母,你心里面的感受是怎么样的? 所以嘛,键盘 ...

  4. java poi 图片 内存溢出_解决java poi海量数据导出内存溢出问题

    找了很多天的解决方法,一直被分页查询绕进去了,其实数据都能查出来的,真正卡的地方是ExcelExportUtil类下调错了方法. 最开始调用的方法是(标记的地方):  workbook = new H ...

  5. java导出excel限制大小_解决java poi导出excel2003不能超过65536行的问题

    /*** 如果达到50000条数据则重新创建工作表的逻辑*/@Overridepublic void exportExcel(ListformList, ServletOutputStream out ...

  6. java类型转换异常_解决java.lang.ClassCastException的java类型转换异常的问题

    解决java.lang.ClassCastException的java类型转换异常的问题,异常,对象,错误,给大家,会报 解决java.lang.ClassCastException的java类型转换 ...

  7. 【源码+图片素材】Java王者荣耀游戏开发_开发Java游戏项目【王者荣耀】1天搞定!!!腾讯游戏_Java课程设计_Java实战项目_Java初级项目

    王者荣耀是当下热门手游之一,小伙伴们是否想过如何制作一款属于自己的王者荣耀游戏呢? 本课程讲解了一个王者荣耀游戏的详细编写流程,即使你是刚入门Java的新手,只要你简单掌握了该游戏所需要的JavaSE ...

  8. 解决Java Web项目无法读取配置文件问题

    错误描述 报错信息如下图所示,Web应用后台在读取配置文件的时候,系统找不到指定的路径. 这是Java Web项目的目录结构: 这是报错部分的代码: static {try {Properties p ...

  9. java自定义配置文件_基于java读取并引用自定义配置文件

    基于java读取并引用自定义配置文件 首先在resources目录创建自定义的配置文件 配置文件的格式: 写工具类,得到配置参数 import java.io.IOException; import ...

最新文章

  1. java 静态 编译_Java中的动态和静态编译实例详解
  2. JS动态添加多个事件
  3. 深度学习(十九)基于空间金字塔池化的卷积神经网络物体检测-ECCV 2014
  4. java compareandset 包_在Java中,AtomicInteger compareAndSet()和synced关键字的性能如何?...
  5. 腾讯基于 Flink SQL 的功能扩展与深度优化实践
  6. java中 hashset_Java中的HashSet
  7. 计算机主机接线视频教程,电脑主板跳线怎么接?电脑机箱与主板跳线接法图解教程...
  8. [转载] python——连接Oracle数据库
  9. 使用Jenkins搭建持续集成环境的方法(三)
  10. 详解相机的sensor工作原理
  11. 无线WIFI“信道”
  12. 硬盘出现异响应急方案
  13. ssrs报表服务器数据库配置文件,ReportingServicesService 配置文件
  14. 【问答】用SVG矢量图形自定义不规则控件——中国地图
  15. 〖产品思维训练白宝书 - 产品思维认知篇⑦〗- 聊一聊 产品经理 的工作内容与职责划分
  16. 美国NOAA/AVHRR遥感数据
  17. java-net-php-python-54jspm军舰管理系统计算机毕业设计程序
  18. 项目管理中,项目干系人的角色和责任
  19. jpg转pdf软件免费下载
  20. 典型的几种机器人控制架构介绍

热门文章

  1. html去控制手机的按键
  2. sklearn数据降维之字典学习
  3. 微信小程序开发者工具无法输入中文问题
  4. 淘沙时代靠谱吗-淘宝私域流量指什么?怎么获得?
  5. Everything 全局搜索之正则表达式Regex
  6. 中国碳化硅(SiC)行业“十四五”规划和远景目标建议报告2022-2028年
  7. 定义QTimer引发的异常:double free or corruption (!prev)
  8. mt4怎么修改服务器代码,如何修改指标参数?
  9. open-falcon开源监控使用
  10. 这10个白嫖网站,或许你一个都不知道!