2012-04-06 70 views
0

我迄今所做的是:如何從jar下的相對路徑獲取URL?

/** Default location of help files folder */ 
private static final String DEFAULT_PATH = "../../../../resources/files/help/"; 
/** A 404 error file */ 
private static final String ERROR_404 = "../../../../resources/files/help/404.html"; 

/** 
* @param fileName 
* @return The URL of file, if found at default location, otherwise a 404 error page URL. 
*/ 
public static URL getURL(String fileName) throws MalformedURLException{ 
    URL url = (new File(ERROR_404)).toURI().toURL(); 
    System.out.println(url); 
    url = (new File(DEFAULT_PATH + fileName)).toURI().toURL(); 
    System.out.println(url); 
    return url; 
} 

輸出:

文件:/ H:/我的%20Project /項目%20Name%20Module /../../../ ../resources/files/help/404.html 文件:/ H:/我的%20Project /項目%20Name%20Module /../../../../資源/文件/幫助/ plazaCode.html

通過NetBeans創建的JAR中的文件夾層次結構:

enter image description here

我在Windows 7上,JDK 7

UPDATE:

其實我想這URLJTextPane顯示通過方法的HTML頁面:

textPane.setPage(URL url); 

我能有比這更好的解決方案嗎?並與相同的文件夾Heirarchy ..?

回答

1
  1. 404.html因爲這是一個應用程序資源,它可能會最終嵌入到Jar中。在檔案
  2. 資源無法使用File對象訪問。
  3. URL getURL(String fileName)爲了避免混淆,更改到URL getURL(String resourceName)
  4. 使用Class.getResource(String)正如您在先前的問題中所討論的那樣。
  5. 「相對」網址成爲了危險的那個階段,因爲它們依賴於包調用它們的類的,我一般讓他們「絕對」用一個單一的/這實際上意味着前綴的完整路徑「尋找這個資源,從運行時類路徑的根目錄'。

這樣String可能讀取(調整代碼爲已經建議休息):

private static final String ERROR_404 = "/resources/files/help/404.html"; 
0

當你以這種方式創建一個文件,你會得到一個相對文件(並因此相對URL)。要從該路徑獲取絕對URL,您需要先獲取絕對文件。 試試這個:

new File(ERROR_404).getCanonicalFile().toURI().toURL() 

(編輯:你上面的JTextPane信息後) 我還沒有吃過這個,所以我對爲什麼不工作沒有頭緒。但它的另一個問題是,你應該問一個新的問題。

+0

同樣的結果。 。 。 – Asif 2012-04-06 12:17:19

+0

對,對不起。採取了錯誤的方法。 getCanonicalFile是正確的,我會編輯我的答案。 – 2012-04-06 12:21:14

+0

再次,它沒有工作,輸出:'文件:/ H:/resources/files/help/404.html 文件:/ H:/resources/files/help/plazaCode.html'和相同的空指針異常。 – Asif 2012-04-06 12:26:48

1

您可以使用URL url = getClass().getResource("...")。可能是「/files/help/404.html」。