日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java 获取资源,Java资源获取

發布時間:2025/3/20 java 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 获取资源,Java资源获取 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java程序中,通常通過getResource()方法獲取資源,其中有一下方法及其區別

Class.getResource(String path);

/*

path不以"/"開頭時,默認是此包下獲取資源

path在以"/"開頭時,默認是此項目的ClassPath根下獲取資源

*/

package com.test.testResource;

public class Main {

public static void main(String[] args) {

System.out.println(Main.class.getResource("/"));

}

}

/*

輸出為file:/C:/Users/Chywan/OneDrive/daily_program/Java/LearningCode/Test/target/classes/

*/

package com.test.testResource;

public class Main {

public static void main(String[] args) {

System.out.println(Main.class.getResource(""));

}

}

/*

輸出為file:/C:/Users/Chywan/OneDrive/daily_program/Java/LearningCode/Test/target/classes/com/test/testResource/

*/

//所以,其實在沒有加入"/“時獲取的是相對于類的相對路徑為”“所對應的絕對路徑,在使用”/“后獲取的是編譯后的類的路徑,如maven編譯的項目就是target/classes/

Class.getClassloader.getResource();

/*

ClassLoader的加載是雙親委派機制,所以在獲取Main.class.getClassLoader()時獲得的是BootstrapClassLoader,是C++底層實現的,所以getResource("/")獲取的是null,而getResource("")時,獲取的是加載器的相對路徑,我的理解是加載器是從項目的類根路徑起效的,所以就算類根路徑

*/

package com.test.testResource;

public class Main {

public static void main(String[] args) {

System.out.println(Main.class.getClassLoader().getResource("/"));

}

}

/*輸出為null

*/

package com.test.testResource;

public class Main {

public static void main(String[] args) {

System.out.println(Main.class.getClassLoader().getResource(""));

}

}

/*輸出為file:/C:/Users/Chywan/OneDrive/daily_program/Java/LearningCode/Test/target/classes/

*/

// 源碼里面可以看到resolveName()方法對路徑進行處理,本質Class.getResource(String path)還是調用了ClassLoader的方法。

public URL getResource(String name) {

name = resolveName(name);

//獲取資源

}

private String resolveName(String name) {

if (!name.startsWith("/")) { //相對路徑

Class> c = this;

while (c.isArray()) {

c = c.getComponentType();

}

String baseName = c.getPackageName(); //獲取包名

if (baseName != null && !baseName.isEmpty()) { //拼接路徑

name = baseName.replace('.', '/') + "/" + name;

}

} else { //根路徑開始

name = name.substring(1);

}

return name;

}

總結

以上是生活随笔為你收集整理的java 获取资源,Java资源获取的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。