一、getClass().getResource(String name)
javadoc解釋?zhuān)? Finds a resource with a given name. If the {@code name} begins with a {@code '/'}, then the absolute name of the resource is the portion of the {@code name} following the {@code '/'}. Otherwise, the absolute name is of the following form:
該api用來(lái)獲取指定給定名稱(chēng)的資源潮售,返回java.net.URL對(duì)象岭妖,如果找不到資源則返回null省古。在這里name有以“/”開(kāi)始和不以“/開(kāi)始”的區(qū)別硅瞧,下面有具體代碼來(lái)解釋禁偎。
System.out.println(this.getClass().getResource(""));
System.out.println(this.getClass().getResource("/"));
//輸出
file:/E:/activitistudy/activiti_spring/target/classes/cn/cf/
file:/E:/activitistudy/activiti_spring/target/classes/
可以看到如果不以/開(kāi)頭建丧,那么是從當(dāng)前類(lèi)的位置去尋找資源排龄,否則是從classpath下去尋找資源
二、classLoader.getResource(String name)
javadoc解釋?zhuān)? Finds the resource with the given name. A resource is some data (images, audio, text, etc) that can be accessed by class code in a way that is independent of the location of the code.
查找具有給定名稱(chēng)的資源翎朱。資源是一些數(shù)據(jù)(圖像橄维、音頻尺铣、文本等),類(lèi)代碼可以以獨(dú)立于代碼位置的方式訪問(wèn)這些數(shù)據(jù)争舞。 這種方法首先查找自己的父親ClassLoader,由自己的父ClassLoader來(lái)查找資源(實(shí)際上, 假設(shè)父親的父親不是空, 則父親仍會(huì)向上提交查找請(qǐng)求). 假設(shè)自己的父ClassLoader是null, 則查找Java虛擬機(jī)中內(nèi)建的class loader, 并將資源請(qǐng)求提交給它們, 假設(shè)這些操作都失敗了, 則ClassLoader會(huì)調(diào)用自己的findResource()方法來(lái)查找資源.
注意: classLoader.getResource(String name)中的name不能以/開(kāi)頭凛忿。因?yàn)榫褪菑腸lasspath根路徑去加載的,看以下代碼:
System.out.println(Test.class.getClassLoader().getResource(""));
System.out.println(Test.class.getClassLoader().getResource("/"));
//輸出結(jié)果
file:/E:/activitistudy/activiti_spring/target/classes/
null
還有一個(gè)方式是classLoad.getResources(String name),該方法是返回一個(gè)Enumeration<URL>竞川,它與getResource的區(qū)別是店溢,getResource()方法會(huì)返回類(lèi)路徑上碰到的第一個(gè)資源。 而getResources()則會(huì)返回當(dāng)前類(lèi)載入器路徑上的全部反復(fù)資源以及父類(lèi)載入器上的全部反復(fù)資源委乌。