How can I get a URL from relative path under a jar?

杀马特。学长 韩版系。学妹 提交于 2019-12-13 04:09:44

问题


What I have done so far is :

/** 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;
}

Output:

file:/H:/My%20Project/Project%20Name%20Module/../../../../resources/files/help/404.html file:/H:/My%20Project/Project%20Name%20Module/../../../../resources/files/help/plazaCode.html

Folder Hierarchy in the JAR created through NetBeans:

I am on Windows 7, JDK 7.

UPDATE:

Actually I want this URL for a JTextPane to show a HTML page by method:

textPane.setPage(URL url);

Can I have any better solution than this? and with the same Folder Heirarchy.. ?


回答1:


  1. 404.html since this is an application resource, it will probably end up embedded in a Jar.
  2. Resources in archives cannot be accessed using a File object.
  3. URL getURL(String fileName) To help avoid confusion, change that to URL getURL(String resourceName).
  4. Use Class.getResource(String) much as discussed on your previous questions.
  5. 'Relative' URLs become dangerous by that stage, since they depend on the package of the class that calls them, I generally make them 'absolute' by prefixing the entire path with a single / which effectively means 'look for this resource, from the root of the run-time class-path'.

So that String might read (adjusting the rest of the code as already advised):

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



回答2:


You can use URL url = getClass().getResource("..."). Probably "/files/help/404.html".




回答3:


When you create a File in this way you will get a relative file (and therefore a relative URL). To get a absolute URL from that path you need to get an absolute File first. Try this:

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

(EDIT: After you JTextPane information above) I haven't ever tried this, so I have no clue on why that's not working. But its a different question, you should ask a new Question.



来源:https://stackoverflow.com/questions/10043239/how-can-i-get-a-url-from-relative-path-under-a-jar

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!