第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在Java中加載資源的首選方式

在Java中加載資源的首選方式

翻閱古今 2019-08-01 14:37:20
在Java中加載資源的首選方式我想知道在Java中加載資源的最佳方法:this.getClass().getResource() (or getResourceAsStream()),Thread.currentThread().getContextClassLoader().getResource(name),System.class.getResource(name)。
查看完整描述

3 回答

?
FFIVE

TA貢獻1797條經(jīng)驗 獲得超6個贊

根據(jù)您的需求制定解決方案......

有兩件事情,getResourcegetResourceAsStream()從它被稱為的類得到...

  1. 類加載器

  2. 起始位置

所以,如果你這樣做

this.getClass().getResource("foo.txt");

它將嘗試從與“this”類相同的包中加載foo.txt,并使用“this”類的類加載器。如果你在前面放了一個“/”,那么你絕對是引用資源的。

this.getClass().getResource("/x/y/z/foo.txt")

將從“this”的類加載器和xyz包加載資源(它將需要與該包中的類位于同一目錄中)。

Thread.currentThread().getContextClassLoader().getResource(name)

將加載上下文類加載器,但不會根據(jù)任何包解析名稱(必須絕對引用)

System.class.getResource(name)

將使用系統(tǒng)類加載器加載資源(它必須被絕對引用,因為您將無法將任何內(nèi)容放入java.lang包(System的包)中。

只需看看來源。還表明getResourceAsStream只是在getResource返回的URL上調(diào)用“openStream”并返回它。


查看完整回答
反對 回復(fù) 2019-08-01
?
RISEBY

TA貢獻1856條經(jīng)驗 獲得超5個贊

好吧,如果你真的在派生類中,它部分取決于你想要發(fā)生什么。

例如,假設(shè)SuperClass在A.jar中并且SubClass在B.jar中,并且您正在聲明的實例方法中執(zhí)行代碼,SuperClass但where this指的是實例SubClass。如果你使用this.getClass().getResource()它將看起來相對于SubClassB.jar。我懷疑通常不是必需的。

就個人而言,我可能Foo.class.getResourceAsStream(name)最常使用- 如果你已經(jīng)知道你所追求的資源的名稱,并且你確定它的相對位置Foo,那就是IMO最強大的做法。

當(dāng)然,有時候這也不是你想要的:根據(jù)每個案例的優(yōu)點來判斷。它只是“我知道這個資源與這個類捆綁在一起”是我遇到的最常見的一個。


查看完整回答
反對 回復(fù) 2019-08-01
?
小怪獸愛吃肉

TA貢獻1852條經(jīng)驗 獲得超1個贊

我搜索三個地方,如下所示。歡迎評論。

public URL getResource(String resource){

    URL url ;

    //Try with the Thread Context Loader. 
    ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
    if(classLoader != null){
        url = classLoader.getResource(resource);
        if(url != null){
            return url;
        }
    }

    //Let's now try with the classloader that loaded this class.
    classLoader = Loader.class.getClassLoader();
    if(classLoader != null){
        url = classLoader.getResource(resource);
        if(url != null){
            return url;
        }
    }

    //Last ditch attempt. Get the resource from the classpath.
    return ClassLoader.getSystemResource(resource);}


查看完整回答
反對 回復(fù) 2019-08-01
  • 3 回答
  • 0 關(guān)注
  • 387 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號