Class.getResource()和ClassLoader.getResource()之間有什么區(qū)別?我想知道Class.getResource()和ClassLoader.getResource()?編輯:我特別想知道在文件/目錄級(jí)別是否涉及緩存。如“目錄列表是否緩存在類版本中?”AFAIK基本上應(yīng)該這樣做,但事實(shí)并非如此:getClass().getResource() getClass().getClassLoader().getResource()我在處理一些報(bào)表生成代碼時(shí)發(fā)現(xiàn)了這一點(diǎn),這些代碼在WEB-INF/classes/從該目錄中的現(xiàn)有文件中刪除。當(dāng)使用Class中的方法時(shí),我可以使用getClass().getResource(),但是當(dāng)嘗試獲取新創(chuàng)建的文件時(shí),我收到了一個(gè)空對(duì)象。瀏覽目錄可以清楚地顯示新文件在那里。文件名前面加上一個(gè)正斜杠,如“/myFile.txt”。這個(gè)ClassLoader版本getResource()另一方面,確實(shí)找到了生成的文件。從這一經(jīng)驗(yàn)來(lái)看,目錄列表似乎存在某種類型的緩存。我說(shuō)的對(duì)嗎?如果是的話,這份文件在哪里?從API文檔在……上面Class.getResource()查找具有給定名稱的資源。用于搜索與給定類關(guān)聯(lián)的資源的規(guī)則由類的定義類加載器實(shí)現(xiàn)。此方法委托給此對(duì)象的類加載器。如果此對(duì)象是由引導(dǎo)類加載器加載的,則該方法將委托給ClassLoader.getSystemResource(java.lang.String).。對(duì)我來(lái)說(shuō),這是“Class.getResource實(shí)際上正在調(diào)用它自己的類加載器的getResource()”。這和做getClass().getClassLoader().getResource()..但顯然不是。有人能給我一些關(guān)于這件事的啟示嗎?
3 回答

夢(mèng)里花落0921
TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超6個(gè)贊
Class.getResource
foo.bar.Baz.class.getResource("xyz.txt");foo.bar.Baz.class.getClassLoader().getResource("foo/bar/xyz.txt");
foo.bar.Baz.class.getResource("/data/xyz.txt");foo.bar.Baz.class.getClassLoader().getResource("data/xyz.txt");

達(dá)令說(shuō)
TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超6個(gè)贊
.class
System.out.println( getClass().getResource(getClass().getSimpleName() + ".class") );
添加回答
舉報(bào)
0/150
提交
取消