Java中的getResource()方法,及路径相关问题
2023-03-14 22:40:37 时间
在Java中需要加载一个文件时,使用getResource()方法进行加载,会报错
[Caused by: java.lang.NullPointerException: Location is required.
这是对.getClass().getClassLoader().getResource()和.getClass().getResource()的理解不够深入的原因。
二者主要区别如下:
-
getClass().getResource(fileName):表示只会在当前调用类所在的同一路径下查找该fileName文件;
-
getClass().getClassLoader().getResource(fileName):表示只会在classpath根目录下(/)查找该文件;
-
fileName如果是前面加“/”,如"/fileName",则表示绝对路径,取/目录下的该文件;
-
如果是前面没有加“/”,如"fileName",则表示相对路径,取与调用类同一路径下的该文件。
-
getClassLoader()表示/目录,即classpath根目录
如果路径中包含包名 ,getClass().getResource(“com/xxx/1.xml”);
包名的层级使用"/"隔开(正斜杠),而非“.”(半角句号)。
举例:
包com.aaa下有调用类A,需要引用配置文件1.xml:
- 配置文件在包com.aaa下
getClass().getResource("1.fxml") ——成功
getClass().getResource("/1.fxml")——失败
getClass().getClassLoader().getResource("1.fxml")——失败
getClass().getClassLoader().getResource("/1.fxml")——失败
第2条失败,原因是使用了绝对路径,路径不正确(/目录下没有该文件)。应为:
getClass().getResource("/com/aaa/1.fxml")
(com前有"/",表示绝对目录,从/目录开始)
第3条失败是因为相对路径不正确,应为:
getClass().getClassLoader().getResource("com/aaa/1.fxml")
(此处注意com前面没有“/”,因为getClassLoader()已经表示/目录)
第4条失败是绝对路径不正确,因为当前已在/目录下,再使用/1.fxml就出错。可以改为如下:
getClass().getClassLoader().getResource("./1.fxml")
2.配置文件在根目录下,
getClass().getResource("1.fxml") ——失败
getClass().getResource("/1.fxml")——成功
getClass().getClassLoader().getResource("1.fxml")——成功
getClass().getClassLoader().getResource("/1.fxml")——失败
第1条是使用相对路径,路径不正确所以失败,应为:
getClass().getResource("../../1.fxml")
第4条失败是因为当前路径已经为/。可以使用:
getClass().getClassLoader().getResource("./1.fxml")
相关文章
- 程序员们,看我是如何打败拖延症的
- 随机数是骗人的,.Net、Java、C为我作证
- 面向 GC 的 Java 编程
- 对台阶步数问题的数学分析及更优解探索
- GitHub上最流行的10000个Java都使用了哪些库?
- Java 8 中 HashMap 的性能提升
- 从LongAdder看更高效的无锁实现
- 非洲程序员的各种苦恼:网费奇高
- Unity3D游戏开发之仿仙剑奇侠传角色控制效果
- Oracle 发布大量安全更新,涉及 Java 等
- JDK 7u55 与JDK 8u5 发布
- Java 8新特性探究(7):深入解析日期和时间-JSR310
- Java 8新特性探究(6):泛型的目标类型推断
- Java 8新特性探究(5):重复注解
- Python 2.7 支持时间延长到 2020 年
- Java8如何进行stream,reduce,collection操作
- 国内的免费Java网店系统KgShop V3.0.1云盘版发布!
- 深入理解Scala---核心规则
- Jquery+Ajax+asp.net+sqlserver-编写的通用邮件管理(源码)
- 热门游戏 2048 C++ 源代码分享