2012-04-06 13 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:/ My%20Project/Project%20Name%20Module /../../../../ resources/files/help/plazaCode.html

NetBeansで作成されたJARのフォルダ階層:

enter image description here

私は、Windows 7日午前

、JDK 7

UPDATE:

実は私はこの方法でHTMLページを表示するJTextPaneため、このURLをしたい:

textPane.setPage(URL url); 

これ以上の解決策はありますか?と同じフォルダの階層化..と?

答えて

1
  1. 404.htmlこれはアプリケーションリソースであるため、おそらくJarに埋め込まれます。
  2. アーカイブ内のリソースは、Fileオブジェクトを使用してアクセスできません。
  3. URL getURL(String fileName)混乱を避けるため、URL getURL(String resourceName)に変更してください。
  4. Class.getResource(String)は、以前の質問で説明したとおりです。
  5. 「相対的な」URLは、それらを呼び出すクラスのパッケージに依存するため、そのステージでは危険になります。パス全体に接頭辞「/」を付けると、実行時クラスパスのルートから '

(すでに助言として、コードの残りの部分を調整する)Stringを読むかもしれないようにするため:

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

このようにファイルを作成すると、相対ファイル(したがって相対URL)が取得されます。そのパスから絶対URLを取得するには、まず絶対ファイルを取得する必要があります。 これを試してみてください:

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

(EDIT:上記のあなたの後JTextPaneの情報) 私が今までにこれを試していないので、私はそれが働いていない理由について見当もつかない。しかし、その別の質問、あなたは新しい質問をする必要があります。

+0

同じ結果です。 。 。 – Asif

+0

ええ、ごめんなさい。間違った方法を取った。 getCanonicalFileが正しいです、私は私の答えを編集します。 –

+0

出力: 'file:/ H:/resources/files/help/404.html ファイル:/ H:/resources/files/help/plazaCode.html'と同じヌルポインタ例外.. – Asif

1

あなたはURL url = getClass().getResource("...")を使用することができます。おそらく "/files/help/404.html"でしょう。

関連する問題