classloader提供了兩個方法用於從裝載的類路徑中取得資源:
public urlgetresource(string name);
public inputstreamgetresourceasstream(string name);
這裡name是資源的類路徑,它是相對與「/」根路徑下的位置。getresource得到的是乙個url物件來定位資源,而getresourceasstream取得該資源輸入流的引用保證程式可以從正確的位置抽取資料。
但是真正使用的不是classloader的這兩個方法,而是class的 getresource和getresourceasstream方法,因為class物件可以從你的類得到(如yourclass.class或 yourclass.getclass()),而classloader則需要再呼叫一次yourclass.getclassloader()方法,不過根據jdk文件的說法,class物件的這兩個方法其實是「委託」(delegate)給裝載它的classloader來做的,所以只需要使用 class物件的這兩個方法就可以了。
因此,直接呼叫this.getclass().getresourceasstream(string name);獲取流,靜態化方法中則使用classloader.getsystemresourceasstream
(string name); 。
下面是一些得到classpath和當前類的絕對路徑的一些方法。你可能需要使用其中的一些方法來得到你需要的資源的絕對路徑。
1.this.getclass().getresource("")
得到的是當前類class檔案的uri目錄。不包括自己!
如:file:/d:/workspace/jbpmtest3/bin/com/test/
2.this.getclass().getresource("/")
得到的是當前的classpath的絕對uri路徑。
如:file:/d:/workspace/jbpmtest3/bin/
3.this.getclass().getclassloader().getresource("")
得到的也是當前classpath的絕對uri路徑。
如:file:/d:/workspace/jbpmtest3/bin/
4.classloader.getsystemresource("")
得到的也是當前classpath的絕對uri路徑。
如:file:/d:/workspace/jbpmtest3/bin/
5.thread.currentthread().getcontextclassloader().getresource("")
得到的也是當前classpath的絕對uri路徑。
如:file:/d:/workspace/jbpmtest3/bin/
6.servletactioncontext.getservletcontext().getrealpath(「/」)
**:
JAVA獲取CLASSPATH路徑
url classloader提供了兩個方法用於從裝載的類路徑中取得資源 public urlgetresource string name public inputstreamgetresourceasstream string name 這裡name是資源的類路徑,它是相對與 根路徑下的位置。g...
java獲取classpath以外的路徑
最近在使用以前寫過的 生成器 從表名可生成所有的 的時候,發現生成的檔案都在classpath目錄下,所有的檔案都得自己拷到工程目錄下,於是,想優化一下,取得classpath目錄以外的路徑,很簡單,使用getcanonicalpath,如下 string classpath thread.curr...
Java中獲取classpath路徑下的資源檔案
classloader提供了兩個方法用於從裝載的類路徑中取得資源 public url getresource string name public inputstream getresourceasstream string name 這裡name是資源的類路徑,它是相對與 根路徑下的位置。get...