文件: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等协议跟两个斜杠?

如何将 Spring MVC 控制器映射到带有和不带有斜杠的 uri?

URI 和双斜杠

在 URI 中包含斜杠字符“/”的标识符

WPF使用资源图片

.htaccess 重写以在末尾强制使用斜杠