zoukankan      html  css  js  c++  java
  • 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")



  • 相关阅读:
    opencv获取网络相机的图像-不用sdk
    openpose开发(1)官方1.5版本源码编译
    Anaconda3(5-1)程序编辑器 自带的spyder
    Anaconda3(5-2)程序编辑器 win10下PyCharm安装及配置Pytorch流程
    Anaconda3(4)安装pytorch
    (0)资料收集
    mock以及特殊场景下对mock数据的处理
    shell编程中的控制判断语句
    shell相关知识点
    React (native) 相关知识
  • 原文地址:https://www.cnblogs.com/tinaluo/p/12357381.html
Copyright © 2011-2022 走看看