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”)

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • ios屏蔽ota更新描述文件(苹果软件更新怎么关闭)

    前言iOS手机下载新系统文件后,老是提示更新升级,确实很烦人,且为了防止手机被不小心给升级了,可以按照以下方法让手机显示当前版本为最高版本,不会下载升级包进行安装升级。操作步骤1、Safari浏览器中输入网址ibeta.me进入网页,选择最右侧屏蔽OTA更新,点击立即安装则会立即下载一个描述文件。2、进入手机设置->通用->描述文件选择tvOS13BetaSoftwareProfile,点击安装3、安装成功后,会提示重启手机,点击重启

  • 直读光谱仪分析谱线_频谱分析仪主要有哪几种

    直读光谱仪分析谱线_频谱分析仪主要有哪几种为什么使用频谱仪?01认识频谱电磁频谱,是指按电磁波波长(或频率)连续排列的电磁波族,是一种看不见摸不着但时刻伴随我们的东西。当我们使用电磁波将一串信息发送出去时,在时域上他是一段强度不同,疏密变化的时间信号,在其中的任意时刻,你所能获取的只有他的强度;当我们换个角度,站在频域上来看时,在信号的每一个时刻,你都能看到他从时域的一个点延展成了频域的一个面,你所能获取到的信息量将成倍增加,这有助于我们从中解析出更丰富的内容。因此,电磁频谱的观测,或者说使用频谱仪,我们实际上是换一…

  • java生成pfx_JAVA代码-数字证书公私钥生成-公钥cer ,私钥jks, pfx格式

    java生成pfx_JAVA代码-数字证书公私钥生成-公钥cer ,私钥jks, pfx格式importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.FileWriter;importjava.io.IOException;importjava.math.BigInteger;importjava.security.InvalidKeyException;im…

  • Ubuntu虚拟显示器_ubuntu创建虚拟环境

    Ubuntu虚拟显示器_ubuntu创建虚拟环境参考:http://blog.chinaunix.net/uid-27875-id-5821774.html

  • 一文就让你搞懂http和https的通信过程及区别

    一文就让你搞懂http和https的通信过程及区别

  • Access数据库多表联合查询

    Access数据库多表联合查询Access数据库多表联合查询1、Access数据库多表联合查询,每次连接之前须将连接符前面的内容放在括号里面,示例如下:      select表a.字段1,表b.字段1,表c.字段1,表d.字段1from((表ainnerjoin表bon表a.字段=表b.字段)innerjoin表con表c.字段=表a.字段)innerjoin表don表a.

发表回复

您的电子邮箱地址不会被公开。

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