Java路徑
Java中使用的路徑怒炸,分為兩種:絕對(duì)路徑和相對(duì)路徑李丰。
具體而言让虐,又分為四種:
一 URI形式的絕對(duì)資源路徑
如:
file:/D:/java/eclipse32/workspace/jbpmtest3/bin/aaa.b
- URL是URI的特例。
- URL可以打開資源,而URI則不行夺艰。
- URL的前綴/協(xié)議,必須是Java熟悉的沉衣。
- URL和URI對(duì)象可以互相轉(zhuǎn)換郁副,使用各自的toURI(),toURL()方法即可!
二 本地系統(tǒng)的絕對(duì)路徑
如:
D:/java/eclipse32/workspace/jbpmtest3/bin/aaa.b
Java.io包中的類豌习,需要使用這種形式的參數(shù)存谎。
但是,它們一般也提供了URI類型的參數(shù)肥隆,而URI類型的參數(shù)既荚,接受的是URI樣式的String。因此栋艳,通過URI轉(zhuǎn)換恰聘,還是可以把URI樣式的絕對(duì)路徑用在java.io包中的類中。
三 相對(duì)于classpath的相對(duì)路徑
如:
相對(duì)于file:/D:/java/eclipse32/workspace/jbpmtest3/bin/這個(gè)路徑的相對(duì)路徑吸占。
其中晴叨,bin是本項(xiàng)目的classpath。所有的Java源文件編譯后的.class文件復(fù)制到這個(gè)目錄中矾屯。
四 相對(duì)于當(dāng)前用戶目錄的相對(duì)路徑
就是相對(duì)于System.getProperty("user.dir")返回的路徑兼蕊。
對(duì)于一般項(xiàng)目,這是項(xiàng)目的根路徑件蚕。
對(duì)于JavaEE服務(wù)器遍略,這可能是服務(wù)器的某個(gè)路徑。
這個(gè)并沒有統(tǒng)一的規(guī)范骤坐!所以,絕對(duì)不要使用"相對(duì)于當(dāng)前用戶目錄的相對(duì)路徑"下愈。
然而:
默認(rèn)情況下纽绍,java.io 包中的類總是根據(jù)當(dāng)前用戶目錄來分析相對(duì)路徑名。此目錄由系統(tǒng)屬性 user.dir 指定势似,通常是 Java 虛擬機(jī)的調(diào)用目錄拌夏。
這就是說僧著,在使用java.io包中的類時(shí),最好不要使用相對(duì)路徑障簿。否則盹愚,雖然在J2SE應(yīng)用程序中可能還算正常,但是到了J2EE程序中站故,一定會(huì)出問題皆怕!而且這個(gè)路徑,在不同的服務(wù)器中都是不同的西篓!
下面是我在學(xué)習(xí)過程中比較好的一種讀取classpath文件的一個(gè)好方法:
import java.io.IOException;
import java.util.Properties;
import org.omg.CORBA.portable.InputStream;
public class D {
private static Properties props = new Properties();
public static String getUrl(String fileName, String key) {
try {
// 得到當(dāng)前的classpath的絕對(duì)路徑的URI表示法愈腾。
java.io.InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName);
// 讀取Properties文件
props.load(stream);
return props.getProperty(key);
} catch (IOException e) {
e.printStackTrace();
return "";
}
}
}