Maven项目读取resources文件路径问题解决方案
作者:贾树丙 发布时间:2023-04-21 15:05:11
读取resources下文件的方法
网上有问答如下:
问:
new FileInputStream("src/main/resources/all.properties")
new FileInputStream("./src/main/resources/all.properties")
上面两个无法读取maven下资源文件目录下的文件嘛,总是提示找不到该路径,这么写错了嘛,但是我的其他maven可以读取
答:
要取编译后的路径,而不是你看到的src/main/resources的路径。如下:
URL url = MyTest.class.getClassLoader().getResource("conf.properties");
File file = new File(url.getFile());
或者
InputStream in = MyTest.class.getClassLoader().getResourceAsStream("conf.properties");
第二种方法,也可以改成
InputStream in = getClass().getClassLoader().getResourceAsStream("conf.properties");
同事的一种的写法是:
InputStream in = getClass().getResourceAsStream("conf.properties");
然后怎么也获取不到,最后才发现,只要添加了.getClassLoader()就可以了
getClassLoader() 的作用
getClass():取得当前对象所属的Class对象
getClassLoader():取得该Class对象的类装载器
类装载器负责从Java字符文件将字符流读入内存,并构造Class类对象,在你说的问题那里,通过它可以得到一个文件的输入
Class.getClassLoader()的一个小陷阱,空指针异常:
昨天我的code总在Integer.class.getClassLoader().getResource("*********");这一句抛出空指针异常,定位为getClassLoader()返回null,查了一下jdk的文档,原来这里还有一个陷阱:
这里jdk告诉我们:如果一个类是通过bootstrap 载入的,那我们通过这个类去获得classloader的话,有些jdk的实现是会返回一个null的,比如说我用 new Object().getClass().getClassLoader()的话,会返回一个null,这样的话上面的代码就会出现NullPointer异常.所以保险起见我们最好还是使用我们自己写的类来获取classloader("this.getClass().getClassLoader()“),这样一来就不会有问题。
来源:https://www.cnblogs.com/acm-bingzi/p/mavenResources.html


猜你喜欢
- 说明Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架。Spring Security是一个专注于为Java应
- 继上一次利用Servlet实现图片上传,这次利用基于MVC的Struts框架,封装了Servlet并简化了JSP页面跳转。JSP上传页面上传
- 环境信息名称版本号Spring Boot2.4.5Idea2021.3.2服务端实现导入依赖<dependency>  
- NTP是Android原生通过网络获取时间的机制,其中关键代码逻辑都在NetworkTimeUpdateService,它是Android系
- 本文实例讲述了Java中对象的比较操作。分享给大家供大家参考,具体如下:一 点睛在Java中,有两种方式可用于对象间的比较:利用"
- 本文实例为大家分享了android view实现横向滑动选择的具体代码,供大家参考,具体内容如下做文字编辑,从网上找来的。Horizonta
- 1.UUID 简介UUID 含义是通用唯一识别码 (Universally Unique Identifier),这是一个软件建构的标准。也
- 什么是TaskScheduler?SynchronizationContext是对“调度程序(scheduler)&am
- 本文实例为大家分享了Dijkstra算法实现校园导游程序的具体代码,供大家参考,具体内容如下应用设计性实验1.问题描述校网导游程序: 一个校
- 写在前面之前想尝试把JWT和Shiro结合到一起,但是在网上查了些博客,也没太有看懂,所以就自己重新研究了一下Shiro的工作机制,然后自己
- 今天朋友圈又火了,听说原因是 @腾讯官网 就能得到一顶绿色的帽子,啊呸,是一个好看的国庆节头像,可是听说没一会就502了,那么我们自己动手实
- 1、this关键字首先需要提醒的是,在整个Java之中,this是最麻烦的一个关键字,只要是代码开发,几乎都离不开this。在Java中th
- 前言之前有人提到过取绝对值时 直接写三目运算符比用Mathf.Abs()效率高 没觉得能高太多今天测了一下 真是不测不知道 一测吓一跳 直接
- 前面做了app微信支付的回调处理,现在需要做微信公众号的支付,花了一天多时间,终于折腾出来了!鉴于坑爹的微信官方没有提供Java版的demo
- 目录1 Semaphore的主要方法2 实例讲解实现单例模式3 源码解析构造方法获取许可释放许可减小许可数量获取剩余许可数量前言:Semap
- 目录切换语言核心代码使用dragonFace改系统语言本篇简单介绍将在Android App中进行语言的切换和使用dragonFace改系统
- SpringBoot是什么?Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初
- springboot静态资源加载顺序优先级看springboot源码里面springboot静态资源加载规则我们经常会使用springboo
- 问题现象今天在做一个需求:将存入数据库中的数据读到后解析成list遍历分析数据格式:"[1677660600000, 167766
- 简介设计模式是软件设计中的一种常见方法,通过定义一系列通用的解决方案,来解决常见的软件设计问题。其中,抽象工厂模式是一种非常常见的设计模式,