Thread.currentThread().getContextClassLoader().getResourceAsStream()读取配置文件
Java中使用的路徑,分為兩種:絕對路徑和相對路徑。具體而言,又分為四種:
一、URI形式的絕對資源路徑
如:file:/D:/java/eclipse/workspace/j/bin/a
URL是URI的特例。URL的前綴/協(xié)議,必須是Java熟悉的。URL可以打開資源,而URI則不行。
URL和URI對象可以互相轉(zhuǎn)換,使用各自的toURI(),toURL()方法即可!
二、本地系統(tǒng)的絕對路徑
D:/java/eclipse/workspace/j/bin/a
Java.io包中的類,需要使用這種形式的參數(shù)。
但是,它們一般也提供了URI類型的參數(shù),而URI類型的參數(shù),接受的是URI樣式的String。因此,通過URI轉(zhuǎn)換,還是可以把URI樣式的絕對路徑用在java.io包中的類中。
三、相對于classpath的相對路徑
如:相對于
file:/D:/java/eclipse/workspace/j/bin/這個(gè)路徑的相對路徑。其中,bin是本項(xiàng)目的classpath。所有的Java源文件編譯后的.class文件復(fù)制到這個(gè)目錄中。
四、相對于當(dāng)前用戶目錄的相對路徑
就是相對于System.getProperty("user.dir")返回的路徑。
對于一般項(xiàng)目,這是項(xiàng)目的根路徑。對于JavaEE服務(wù)器,這可能是服務(wù)器的某個(gè)路徑。這個(gè)并沒有統(tǒng)一的規(guī)范!
所以,絕對不要使用"相對于當(dāng)前用戶目錄的相對路徑"。然而:
默認(rèn)情況下,java.io 包中的類總是根據(jù)當(dāng)前用戶目錄來分析相對路徑名。此目錄由系統(tǒng)屬性 user.dir 指定,通常是 Java 虛擬機(jī)的調(diào)用目錄。
這就是說,在使用java.io包中的類時(shí),最好不要使用相對路徑。否則,雖然在J2SE應(yīng)用程序中可能還算正常,但是到了J2EE程序中,一定會(huì)出問題!而且這個(gè)路徑,在不同的服務(wù)器中都是不同的!
? ? ? 下面是我在學(xué)習(xí)過程中比較好的一種讀取classpath文件的一個(gè)好方法
??
private static Properties props = new Properties(); public static String getUrl(String fileName, String key) {if (isBlank(fileName)) {logger.warn("配置文件不存在:{}", fileName);} else {try {//得到當(dāng)前的classpath的絕對路徑的URI表示法。InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName);//讀取Properties文件 props.load(stream);return props.getProperty(key);} catch (IOException e) {e.printStackTrace();return "";}} } //判斷fileName是否有空格 public static boolean isBlank(String str) {int length;if (str != null && (length = str.length()) != 0) {for(int i = 0; i < length; ++i) {if (!Character.isWhitespace(str.charAt(i))) {return false;}}return true;} else {return true;} }?
轉(zhuǎn)載于:https://www.cnblogs.com/ttscoupe/p/7660199.html
總結(jié)
以上是生活随笔為你收集整理的Thread.currentThread().getContextClassLoader().getResourceAsStream()读取配置文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android中BroadCast与Ac
- 下一篇: [Debugging]分析博客园提交评论