文件:URI 和斜杠

2022-09-03 06:56:35

我正在处理的应用程序涉及访问网络文件共享上的文件,我们正在使用 URI 来指定文件的位置。

我对文件:URI的理解是它们应该采用+path的形式。对于 Windows 网络共享,此路径看起来像 ,因此生成的 URI 变为 。file://\\servername\dir\filefile:////servername/dir/file

这似乎对Java的URI类非常有效,但Win32 API似乎想要一个样式URI,Java拒绝了它,因为它“有一个权威组件”。file://servername/dir/file

我是否正确理解了网络共享 URI?有没有另一种方法可以指定路径而不用Java抱怨权限?

编辑:我们希望能够将路径存储为URI,以便利用URI的方案部分来指定其他位置(例如,file:vs. other:)。但正如所指出的,看起来Java可能只是有自己的URI问题......


答案 1

看来Java是错误的

不正确:
正确:file:////applib/products/a%2Db/abc%5F9/4148.920a/media/start.swffile://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 路径存储在 URI 的路径组件中,并将服务器/颁发机构组件留空。只要您始终如一地使用此字符串表示形式,您就可以成功地与java.net.URI进行交互。


答案 2

推荐