我正在处理的应用程序涉及访问networking文件共享上的文件,我们使用URI来指定文件的位置。
我对文件:URI的理解是它们应该采用file://
+ path的forms。 在Windowsnetworking共享的情况下,这个path看起来像\\servername\dir\file
,所以得到的URI变成file:////servername/dir/file
。
这似乎对Java的URI类非常有用 ,但是Win32 API似乎需要一个file://servername/dir/file
style URI,因为它“有一个权限组件”,所以Java拒绝这个URI。
我是否正确理解networking共享URI? 有没有另一种方式来指定没有Java抱怨权威的path?
编辑:我们希望能够将path存储为URI,以便使用URI的scheme部分来指定其他位置(例如file:和其他:)。 但正如所指出的,它看起来像Java可能只是有自己的问题与URI …
看来Java是错误的 :
不正确:
file:////applib/products/a%2Db/abc%5F9/4148.920a/media/start.swf
正确:file://applib/products/ab/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进行交互。