文件URI和斜杠

16
我正在开发的应用程序涉及访问网络文件共享上的文件,并且我们使用URI来指定文件位置。
据我所知,file:URI 应采用“file://”+ 路径 的形式。对于Windows网络共享,此路径看起来像\\servername\dir\file,因此生成的URI变为file:////servername/dir/file
这似乎非常适用于Java的URI类,但Win32 API似乎想要一个file://servername/dir/file样式的URI,而Java会拒绝它,因为它“具有权限组件”。
我对网络共享URI的理解正确吗?是否有其他方法可以指定路径而不使Java抱怨权限?
编辑:我们希望能够将路径存储为URI,以便利用URI的方案部分指定其他位置(例如file:与other:)。但是正如人们指出的那样,看起来Java可能只是有自己的URI问题...
1个回答

17

看起来Java错了:

错误的URL: file:////applib/products/a%2Db/abc%5F9/4148.920a/media/start.swf
正确的URL: file://applib/products/a-b/abc_9/4148.920a/media/start.swf

关于Java中的UNC路径:

URI类处理UNC路径相当不错,但是有一些问题。在Java类库中,UNC路径的字符串表示如下:

new File("//SERVER/some/path").toURI().toString()
                                                -> "file:////SERVER/some/path

换句话说,URI在路径组件中存储整个UNC路径,并将服务器/权限组件留空。只要您始终使用此字符串表示,就可以成功地与java.net.URI交互。


感谢你的快速回复。第二个链接特别有帮助。虽然我理解整个路径都会存储在URI的“path”段中是有道理的,但我可以看出Java在这方面做得不太一致,所以我会注意这一点。 - Sammy1Am
1
实际上就我所知,文件URL方案甚至不需要双斜杠,只需要一个单斜杠。但是在实际应用中,两种情况都经常出现。 - hippietrail
当没有权限时,路径不能以两个斜杠字符开头。 - Kenn Knowles

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接