【问题标题】:How can I get a URL from relative path under a jar?如何从 jar 下的相对路径获取 URL?
【发布时间】:2012-04-06 12:03:15
【问题描述】:

到目前为止我所做的是:

/** 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:/My%20Project/Project%20Name%20Module/../../../../resources/files/help/404.html 文件:/H:/My%20Project/Project%20Name%20Module/../../../../resources/files/help/plazaCode.html

通过 NetBeans 创建的 JAR 中的文件夹层次结构:

我使用的是 Windows 7,JDK 7。

更新:

实际上,我希望 URLJTextPane 按方法​​显示 HTML 页面:

textPane.setPage(URL url);

我还有比这更好的解决方案吗?并具有相同的文件夹层次结构..?

【问题讨论】:

    标签: java url filepath


    【解决方案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";
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        当您以这种方式创建文件时,您将获得一个相对文件(因此是一个相对 URL)。要从该路径获取绝对 URL,您需要先获取绝对文件。 试试这个:

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

        (编辑:在你上面的 JTextPane 信息之后) 我从来没有试过这个,所以我不知道为什么这不起作用。但这是一个不同的问题,您应该提出一个新问题。

        【讨论】:

        • 是的,对不起。采取了错误的方法。 getCanonicalFile 是正确的,我将编辑我的答案。
        • 还是不行,输出:file:/H:/resources/files/help/404.html file:/H:/resources/files/help/plazaCode.html和同样的空指针异常..
        • 嗯,按照 Java 约定,这是一个有效且正确的 URL。另外,什么 NullPointerException?你没有在你的问题中写下它。 (请注意,有时从 Java 创建的文件 URL 不是它之外的有效 URL。)请提供一个您期望的示例。
        • 对不起,我得到的例外是来自textPane.setPage(FileLoader.getURL()) 行,我只是想在textPane 中打开一个HTML 文件,其中包含我通过图像给出的文件夹层次结构
        • @Asif 很抱歉,我从未尝试过这个。你应该问一个新问题。
        猜你喜欢
        • 2018-11-11
        • 2010-09-21
        • 2020-07-20
        • 1970-01-01
        • 2015-11-06
        • 1970-01-01
        • 2014-06-03
        • 2023-03-31
        • 1970-01-01
        相关资源
        最近更新 更多