2012-02-25 28 views
1

我在應用程序正在使用的庫中遇到了一個錯誤。我已經將問題縮小到java.net.URL類的行爲以及圖書館如何使用它來查找資源。爲什麼java.io.URL去掉最後一個文件夾?

當我運行下面的代碼,輸出是file:/root/myfile.xml代替file:/root/folder/myfile.xml

public static void main(String[] args) throws MalformedURLException { 
    String location = "file:///root/folder"; 
    String spec = "myfile.xml"; 

    URL context = new URL(location); 
    URL url = new URL(context, spec); 

    System.out.println(url); 
} 

如果我在location附加一個斜槓,我會得到預期的輸出。

我很好奇,爲什麼java.net.URL這樣的表現?

+0

///可能工作更美好。 – bmargulies 2012-02-25 00:23:04

+0

@bmargulies謝謝。我更新了這個問題,雖然行爲是一樣的。 – AEW 2012-02-25 00:29:33

+0

我想你只需要在位置字符串的末尾保留'/'... – summea 2012-02-25 00:30:29

回答

3

從頁面的java.net.URL:

應用程序也可以指定一個「相對URL」,它只包含 足夠的信息,以達到資源相對於另一個URL。 相對URL經常在HTML頁面中使用。例如,如果 的URL的內容:

http://java.sun.com/index.html 

內它包含的相對URL:

FAQ.html 

這將是一個速記:

http://java.sun.com/FAQ.html 

因此,通過從location離開過尾隨/,你不是指定的URL構造函數,它是RO對於規範而言,而不是要加入的相對路徑。

相關問題