Java中getClassLoader().getResource()和getResource()的区别

在Java中需要加载一个文件时,使用getResource()方法进行加载,会报错

[Caused by: java.lang.NullPointerException: Location is required.

这是对.getClass().getClassLoader().getResource()和.getClass().getResource()的理解不够深入的原因。

经过查询相关资料后终于明白,区别主要如下:

  1. .getClass().getResource(fileName) :表示只会在当前调用类所在的同一路径下查找该fileName文件;
  2. .getClass().getClassLoader().getResource(fileName):表示只会在根目录下(/)查找该文件;
  3. fileName如果是前面加“/”,如"/fileName",则表示绝对路径,取/目录下的该文件;
    如果是前面没有加“/”,如"fileName",则表示相对路径,取与调用类同一路径下的该文件。
  4. 如果路径中包含包名 ,getClass().getResource("com/xxx/1.xml");
    包名的层级使用"/"隔开(正斜杠),而非“.”(半角句号)。

举例:
包com.aaa下有调用类A,需要引用配置文件1.xml:

1. 配置文件在包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")

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • .bat脚本基本命令语法 目录 批处理的常见命令(未列举的命令还比较多,请查阅帮助信息) 1、REM 和 :: 2...
    庆庆庆庆庆阅读 12,558评论 1 19
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,369评论 19 139
  • Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意...
    萤火虫de梦阅读 99,860评论 9 468
  • 001 投资时间 投资有收益,能复利的时间,例如提升自己的赚钱能力,运动让自己更健康等,但记得长久坚持、不要浮躁。...
    新葵阅读 1,748评论 0 0
  • 文 |卜泉 图 | 网络 在我看来,简单的设计更容易打动消费者,更易占领消费者心智;设计的作品也更富有“黏性”:你...
    卜泉阅读 3,283评论 0 5