java getclassloader_Java中getClassLoader().getResource()和getResource()的区别

java getclassloader_Java中getClassLoader().getResource()和getResource()的区别在Java中需要加载一个文件时,使用getResource()方法进行加载,会报错[Causedby:java.lang.NullPointerException:Locationisrequired.这是对.getClass().getClassLoader().getResource()和.getClass().getResource()的理解不够深入的原因。经过查询相关资料后终于明…

大家好,又见面了,我是你们的朋友全栈君。

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

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

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

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

.getClass().getResource(fileName) :表示只会在当前调用类所在的同一路径下查找该fileName文件;

.getClass().getClassLoader().getResource(fileName):表示只会在根目录下(/)查找该文件;

fileName如果是前面加“/”,如”/fileName”,则表示绝对路径,取/目录下的该文件;

如果是前面没有加“/”,如”fileName”,则表示相对路径,取与调用类同一路径下的该文件。

如果路径中包含包名 ,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”)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/133446.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SSIS 实用表达式部分总结

    SSIS 实用表达式部分总结

    2021年11月26日
  • 突然想去旅游

    突然想去旅游  突然想去旅游,一个人,静静的,去到那些宁静的自然风光中去,置身其中,什么也不想! 

    2022年4月29日
  • C#编程入门_ToArray和CopyTo的区别_22「建议收藏」

    C#编程入门_ToArray和CopyTo的区别_22「建议收藏」ToArray是将一个集合转化成一个数组,该数组是进行ToArray操作的一个产物CopyTo(T[]array)是一个将集合中的数据复制到一个一个已经存在的数组中,只不过是对数组中的元素进行修改usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.T

    2022年5月15日
  • Java的8个Java日志工具[通俗易懂]

    摘要:本文要来分享一些Java程序员最常用的Java日志框架组件。日志工具log4j–最受欢迎的Java日志组件Log4j是一款基于Java的开源日志组件,Log4j功能非常强大,我们可以将日志信息输出到控制台、文件、用户界面,也可以输出到操作系统的事件记录器和一些系统常驻进程。更值得一提的是,Log4j可以允许你非常便捷地自定义日志格式和日志等级,可以帮助开发人员全方位地掌控…

    2022年4月9日
  • maxcompute 2.0复杂数据类型之struct[通俗易懂]

    maxcompute 2.0复杂数据类型之struct[通俗易懂]maxcompute 2.0复杂数据类型之struct

    2022年4月21日
  • Landsat-8 介绍[通俗易懂]

    Landsat-8 介绍[通俗易懂]Landsat-8于2013年2月11日发射升空,目前仍在运行。它始于Landsat数据连续性任务。现在,我们将其简称为Landsat-8。Landsat-8在与太阳同步的近极轨道上绕地球旋转,高度为705公里(438英里),倾斜角为98.2度,每99分钟完成一次地球轨道。卫星的重复周期为16天,赤道穿越时间为:上午10:00+/-15分钟。Landsat-8每天收集550个场景。因此,到2020年8月,它将收集到总计150万个场景。这颗主力卫星仍然是面向公众的开源土地信息的主要内容。…

    2022年7月23日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号