亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決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條經驗 獲得超6個贊

根據您的需求制定解決方案......

有兩件事情,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)

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

System.class.getResource(name)

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

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


查看完整回答
反對 回復 2019-08-01
?
RISEBY

TA貢獻1856條經驗 獲得超5個贊

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

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

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

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


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

TA貢獻1852條經驗 獲得超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);}


查看完整回答
反對 回復 2019-08-01
  • 3 回答
  • 0 關注
  • 389 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號