用Thread.currentThread().getContextClassLoader().getResourceAsStream讀取配置文件


Java 用的路徑分為相對路徑和絕對路徑;

具體又分為四種:

1.URI形式的絕對資源路徑 

  如:file:/D:/java/eclipse/workspace/j/bin/a

  URI包括URL和URN兩個類別,URL是URI的子集,所以URL一定是URI,而URI不一定是URL

  URL是URI的特例(一個標准的URL必須包括:protocol、host、port、path、parameter、anchor)

  URL的前綴/協議,必須是Java熟悉的。URL可以打開資源,而URI則不行。URL和URI對象可以互相轉換,使用各自的toURI(),toURL()方法即可!

2.本地系統的絕對路徑

  D:/java/eclipse/workspace/j/bin/a

  Java.io包中的類,需要使用這種形式的參數。

  但是,它們一般也提供了URI類型的參數,而URI類型的參數,接受的是URI樣式的String。因此,通過URI轉換,還是可以把URI樣式的絕對路徑用在 java.io包中的類中

3.相當於classpath的相對路徑

  如:相對於

  file:/D:/java/eclipse/workspace/j/bin/這個路徑的相對路徑。其中,bin是本項目的classpath。所有的Java源文件編譯后的.class文件復制到這個目錄中

4.相當於當前用戶目錄的相對路徑

  就是相對於System.getProperty("user.dir")返回的路徑

  默認情況下,java.io 包中的類總是根據當前用戶目錄來分析相對路徑名。此目錄由系統屬性 user.dir 指定,通常是 Java 虛擬機的調用目錄。 這就是說,在使用

java.io包中的類時,最好不要使用相對路徑。

下面是一些得到classpath和當前類的絕對路徑的一些方法:

1.FileTest.class.getResource("")    得到的是當前類FileTest.class文件的URI目錄。不包括自己!

如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/com/test/

2.FileTest.class.getResource("/")  得到的是當前的classpath的絕對URI路徑。

如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/

3.Thread.currentThread().getContextClassLoader().getResource("")  得到的也是當前ClassPath的絕對URI路徑。

如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/

4.FileTest.class.getClassLoader().getResource("")  得到的也是當前ClassPath的絕對URI路徑。

如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/

5.ClassLoader.getSystemResource("")  得到的也是當前ClassPath的絕對URI路徑。

如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/

推薦使用Thread.currentThread().getContextClassLoader().getResource("")來得到當前的classpath的絕對路徑的URI表示法。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM