问题
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:
404.html
since this is an application resource, it will probably end up embedded in a Jar.- Resources in archives cannot be accessed using a
File
object. URL getURL(String fileName)
To help avoid confusion, change that toURL getURL(String resourceName)
.- Use
Class.getResource(String)
much as discussed on your previous questions. - '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