2012-04-06 96 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”。

相关问题