gpt4 book ai didi

java - OneJar URL 有什么问题吗?

转载 作者:行者123 更新时间:2023-12-02 06:17:00 26 4
gpt4 key购买 nike

我一直认为URL可以通过这个constructor来组成,以及类似的东西

new URL(new URL("file:/foo/bar/"), "images/a.png")

我明白了

file:/foo/bar/images/a.png

如预期。1但是,从 OneJar我获得了一个看起来很奇怪的 URL 和结果

new URL(new URL("onejar:foo.bar"), "images.a.png")

很简单

onejar:images.a.png

父路径被简单地删除。我尝试用 /. 为这些部分添加前缀或后缀,但没有任何变化。 更新:这不是真的,见下文。

这是一个错误还是我遗漏了什么?我是否必须通过字符串来完成(这感觉很hacky)。

更新:

我发现尾部斜杠确实有帮助。无论出于何种原因,onejar 使用点作为分隔符,但它似乎也接受斜杠。因此,我可以将 onejar:foo.bar 等原始 URL 转换为字符串,附加 /,然后转换回 URL。然后可以通过上面提到的构造函数来组合结果,所以这似乎是正确的方式。

<小时/>

1 除非我忘记了尾部斜线,我经常这样做,但这是一个不同的故事。

最佳答案

所以,除了您要调用的构造函数使用 URL 的事实之外对象作为第一个参数而不是 String ,我猜你看到的行为可能与file有关。方案 URI 是分层的,但如果您不提供任何分层符号(即斜杠),则构造函数会优先考虑规范部分(即第二个参数)而不是上下文部分(即第一个参数)。

例如,当您忘记 file:/foo/bar 上的尾部斜杠时,您真正表示的是文件 bar在目录 foo 。如果您传递相对路径,例如 images/a.png ,构造函数尽可能地将两者结合起来:当然,它不能将相对路径附加到它认为是文件的内容,从而给出 file:/foo/bar/images/a.png ,所以它只是替换 bar file 包含您作为第二个参数传递的文件,给出结果 file:/foo/images/a.png .

这同样适用于您的第二个示例:file:foo.bar表示foo.bar文件,但是当您传递代表 images.a.png 的第二个参数时文件中,替换按照前面示例中的说明进行,给出的结果为 file:images.a.png 。我相信,发生这种情况是因为您缺少层次结构符号(即斜线),而您需要它们才能获得所需的结果。

这实际上是一个猜测,而不是一个明智的答案。

但是,当您输入:

URL url = new URL(new URL("file:foo.bar/"), "images.a.png");
System.out.println(url);

附加/正如您所说,将后缀添加到其中一个部分,结果确实会发生变化,与您所确认的相反,给出以下结果:

file:foo.bar/images.a.png

这似乎与我的猜测一致。

不过,由于我从未使用过 OneJar,从你的问题来看,不清楚你的输入到底是什么,以及你想要获得什么结果。

关于java - OneJar URL 有什么问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21362659/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com