嵌套罐子:URI
Nested jar: URI
jar:
URI scheme 的格式简单定义为jar:<url>!/[<entry>]
.
是否可以将两个这样的 URI“嵌套”在一起,并以这种方式在一个存档中引用一个存档中的文件?类似于:
jar:jar:http://example.com/!/archive!/file
这应该在存档 jar:http://example.com/!/archive
中指定 /file
,即在 http://example.com/
提供的文件中找到的 /archive
。但是,URL.openConnection
抛出异常:
java.net.MalformedURLException: no !/ in spec
我也无法将 !
替换为 %21
,因为这会使 jar:
URI 无效,而且我不知道可以执行任何转义。这有可能吗?或者,作为一个更通用的问题,是否可以在 <url>
中存储带有 !/
的 URI,以便保留它?
如源代码中所述java.net.JarURLConnection
不处理嵌套的 Jar URI。
您的示例 jar:jar:http://example.com/!/archive!/file
在存档 jar:http://example.com/
中被解析为条目 archive!/file
。后者不是有效的 jar URI。您不能转义 !/
序列,因为 jar:
之后和 !/
之前的文本必须是没有任何翻译的有效 URI。
您当然可以提供自己的 URLConnection
支持嵌套 Jar URI 的实现。
虽然另一个答案在 JarURLConnection
的情况下确实是正确的,但 jar:
和类似 URI 的使用不限于此。 Apache Commons VFS:
就是这种情况
jar:// <em>arch-file-uri</em>[! <em>absolute-path</em>]
Where arch-file-uri
refers to a file of any supported type, including other zip files. Note: if you would like to use the ! as normal character it must be escaped using %21
.
“普通字符”表示在存档内文件路径中使用字符,而不是在内部 URI 中。这使得 jar:jar:http://example.com/!/archive!/file
有效,因为它是 !
的 最后一次 出现应该用作分隔符。
请注意,内部 URI 可能仍应保持未转义,因此无法在那里使用 #
。
jar:
URI scheme 的格式简单定义为jar:<url>!/[<entry>]
.
是否可以将两个这样的 URI“嵌套”在一起,并以这种方式在一个存档中引用一个存档中的文件?类似于:
jar:jar:http://example.com/!/archive!/file
这应该在存档 jar:http://example.com/!/archive
中指定 /file
,即在 http://example.com/
提供的文件中找到的 /archive
。但是,URL.openConnection
抛出异常:
java.net.MalformedURLException: no !/ in spec
我也无法将 !
替换为 %21
,因为这会使 jar:
URI 无效,而且我不知道可以执行任何转义。这有可能吗?或者,作为一个更通用的问题,是否可以在 <url>
中存储带有 !/
的 URI,以便保留它?
如源代码中所述java.net.JarURLConnection
不处理嵌套的 Jar URI。
您的示例 jar:jar:http://example.com/!/archive!/file
在存档 jar:http://example.com/
中被解析为条目 archive!/file
。后者不是有效的 jar URI。您不能转义 !/
序列,因为 jar:
之后和 !/
之前的文本必须是没有任何翻译的有效 URI。
您当然可以提供自己的 URLConnection
支持嵌套 Jar URI 的实现。
虽然另一个答案在 JarURLConnection
的情况下确实是正确的,但 jar:
和类似 URI 的使用不限于此。 Apache Commons VFS:
jar:// <em>arch-file-uri</em>[! <em>absolute-path</em>]
Where
arch-file-uri
refers to a file of any supported type, including other zip files. Note: if you would like to use the ! as normal character it must be escaped using%21
.
“普通字符”表示在存档内文件路径中使用字符,而不是在内部 URI 中。这使得 jar:jar:http://example.com/!/archive!/file
有效,因为它是 !
的 最后一次 出现应该用作分隔符。
请注意,内部 URI 可能仍应保持未转义,因此无法在那里使用 #
。