文件:URI 和斜杠
Posted
技术标签:
【中文标题】文件:URI 和斜杠【英文标题】:file: URIs and Slashes 【发布时间】:2010-12-25 01:58:50 【问题描述】:我正在开发的一个应用程序涉及访问网络文件共享上的文件,我们使用 URI 来指定文件的位置。
我对文件的理解:URI应该是file://
+path的形式。对于 Windows 网络共享,此路径类似于 \\servername\dir\file
,因此生成的 URI 变为 file:////servername/dir/file
。
这似乎对 Java 的 URI class 很有效,但 Win32 API 似乎需要一个 file://servername/dir/file
样式的 URI,Java 拒绝它,因为它“具有权限组件”。
我是否正确理解网络共享 URI?是否有另一种方法来指定路径而 Java 不会抱怨权限?
编辑:我们希望能够将路径存储为 URI,以便利用 URI 的方案部分来指定其他位置(例如文件:与其他:)。但正如所指出的,看起来 Java 可能只是在 URI 方面存在自己的问题......
【问题讨论】:
【参考方案1】:好像Java is wrong:
不正确:
file:////applib/products/a%2Db/abc%5F9/4148.920a/media/start.swf
正确:file://applib/products/a-b/abc_9/4148.920a/media/start.swf
在UNC paths in Java:
URI 类可以很好地处理 UNC 路径,但存在一些问题。在Java类库中,UNC路径的字符串表示如下:
new File("//SERVER/some/path").toURI().toString() -> "file:////SERVER/some/path
换句话说,URI 将整个 UNC 路径存储在 URI 的路径组件中,并将服务器/授权组件留空。只要您始终如一地使用此字符串表示,您就可以成功地与 java.net.URI 交互。
【讨论】:
感谢您的快速回复。第二个链接特别有用。虽然整个路径将存储在 URI 的“路径”段中对我来说确实有意义,但我可以看到 Java 这样做有些不一致,所以我会确保注意这一点。 事实上据我所知,文件URL方案甚至不需要双斜杠,而只需要一个斜杠。但在野外,两者都经常看到。 tools.ietf.org/html/rfc3986#section-3 "当权限不存在时,路径不能以两个斜线字符开头"以上是关于文件:URI 和斜杠的主要内容,如果未能解决你的问题,请参考以下文章
uri中为什么本地文件file后面跟三个斜杠, http等协议跟两个斜杠?