16

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

我对文件的理解: URI 是它们应该采用file://+ path的形式。在 Windows 网络共享的情况下,此路径类似于\\servername\dir\file,因此生成的 URI 变为file:////servername/dir/file

这似乎对 Java 的URI 类很有效,但 Win32 API 似乎需要一个file://servername/dir/file样式 URI,Java 拒绝它,因为它“具有权限组件”。

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

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

4

1 回答 1

17

似乎Java是错误的

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

于 2009-12-10T01:15:58.623 回答