JAVA獲得CLASSPATH途徑的辦法詳解。本站提示廣大學習愛好者:(JAVA獲得CLASSPATH途徑的辦法詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是JAVA獲得CLASSPATH途徑的辦法詳解正文
ClassLoader 供給了兩個辦法用於從裝載的類途徑中獲得資本:
public URL getResource (String name); public InputStream getResourceAsStream (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(“/”)
Web運用法式 中,獲得Web運用法式的根目次的相對途徑。如許,我們只須要供給絕對於Web運用法式根目次的途徑,便可以構建出定位資本的相對途徑。
如:file:/D:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/WebProject
留意點:
1.盡可能不要應用絕對於System.getProperty("user.dir")以後用戶目次的絕對途徑。這是一顆准時炸 彈,隨時能夠要你的命。
2.盡可能應用URI情勢的相對途徑資本。它可以很輕易的改變為URI,URL,File對象。
3.盡可能應用絕對classpath的絕對途徑。不要應用相對途徑。應用下面ClassLoaderUtil類的public static URL getExtendResource(String relativePath)辦法曾經可以或許應用絕對於classpath的絕對途徑定位一切地位的資本。
4.相對不要應用硬編碼的相對途徑。由於,我們完整可使用ClassLoader類的getResource("")辦法獲得以後classpath的相對途徑。假如你必定要指定一個相對途徑,那末應用設置裝備擺設文件,也比硬編碼要好很多!
取得CLASSPATH以外途徑的辦法:
URL base = this.getClass().getResource(""); //先取得本類的地點地位,如/home/popeye/testjava/build/classes/net/
String path = new File(base.getFile(), "……/……/……/"+name).getCanonicalPath(); //便可以獲得/home/popeye/testjava/name
別的,假如從ANT啟動法式,this.getClass().getResource("")掏出來的比擬怪,直接用JAVA敕令行調試便可勝利。
上面在看下Java 中獲得類途徑 classpath 的辦法
空話補多說了,直接給年夜家貼症結代碼了,詳細代碼以下所示:
<span > System.out.println("++++++++++++++++++++++++"); String path = System.getProperty("java.class.path"); String path2 = FreeMarkerWriter.class.getProtectionDomain().getCodeSource().getLocation().getPath(); String path3 = FreeMarkerWriter.class.getProtectionDomain().getCodeSource().getLocation().getFile(); String path4 = Thread.currentThread().getContextClassLoader().getResource("").getPath(); System.out.println("path 1 = " + path); System.out.println("path 2 = " + path2); System.out.println("path 3 = " + path3); System.out.println("path 4 = " + path4); System.out.println("++++++++++++++++++++++++"); </span>
以上所述是小編給年夜家引見的Java 中獲得類途徑 classpath 的辦法簡略代碼,願望對年夜家有所贊助,假如年夜家有任何疑問迎接給我留言,小編會實時答復年夜家的!