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...
    慶慶慶慶慶閱讀 8,213評論 1 19
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,933評論 18 139
  • Ubuntu的發音 Ubuntu,源于非洲祖魯人和科薩人的語言,發作 oo-boon-too 的音。了解發音是有意...
    螢火蟲de夢閱讀 99,571評論 9 467
  • 001 投資時間 投資有收益,能復利的時間,例如提升自己的賺錢能力,運動讓自己更健康等,但記得長久堅持、不要浮躁。...
    新葵閱讀 259評論 0 0
  • 文 |卜泉 圖 | 網絡 在我看來,簡單的設計更容易打動消費者,更易占領消費者心智;設計的作品也更富有“黏性”:你...
    卜泉閱讀 468評論 0 5