程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> JAVA獲得CLASSPATH途徑的辦法詳解

JAVA獲得CLASSPATH途徑的辦法詳解

編輯:關於JAVA

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 的辦法簡略代碼,願望對年夜家有所贊助,假如年夜家有任何疑問迎接給我留言,小編會實時答復年夜家的!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved