我正在处理的应用程序涉及访问网络文件共享上的文件,我们正在使用URI来指定文件的位置。
我对文件的理解:URI应该采用file://
+ 路径的形式。对于Windows网络共享,此路径类似于\\servername\dir\file
,因此生成的URI变为file:////servername/dir/file
。
这似乎对Java的URI class非常有用,但Win32 API似乎需要一个file://servername/dir/file
样式的URI,Java拒绝它,因为它“具有权限组件”。
我是否正确理解网络共享URI?是否有另一种方法来指定没有Java抱怨权限的路径?
编辑:我们希望能够将路径存储为URI,以便利用URI的scheme-part来指定其他位置(例如file:versus other :)。但正如所指出的,看起来Java可能只有自己的URI问题......
答案 0 :(得分:16)
不正确:
file:////applib/products/a%2Db/abc%5F9/4148.920a/media/start.swf
正确:file://applib/products/a-b/abc_9/4148.920a/media/start.swf
URI类合理地处理UNC路径,但有一些问题。在Java类库中,UNC路径的字符串表示形式如下:
new File("//SERVER/some/path").toURI().toString() -> "file:////SERVER/some/path
换句话说,URI将整个UNC路径存储在URI的路径组件中,并使服务器/授权组件保持为空。只要您始终使用此字符串表示形式,您就能够与java.net.URI成功交互。