2009-12-10 53 views
13

我正在處理的應用程序涉及訪問網絡文件共享上的文件,我們使用URI來指定文件的位置。file:URIs和斜線

我對文件的理解: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:和other :)。但正如指出的那樣,它看起來像Java可能只是有URI的自己的問題......

回答

14

似乎Java is wrong

不正確的:file:////applib/products/a%2Db/abc%5F9/4148.920a/media/start.swf
正確:file://applib/products/a-b/abc_9/4148.920a/media/start.swf

UNC paths in Java

URI類處理UNC路徑reasonab很好,但有一些問題。在Java類庫,UNC路徑的字符串表示如下:

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

換句話說,所述URI存儲在URI的路徑成分的整個UNC路徑,離開服務器/授權組成部分空。只要您始終如一地使用此字符串表示形式,就可以與java.net.URI成功交互。

+0

感謝您的快速響應。第二個鏈接特別有用。儘管對我來說整個路徑將存儲在URI的'路徑'部分中是有意義的,但我可以看到Java做到這一點有點不一致,所以我會確保注意這一點。 – Sammy1Am 2009-12-14 17:28:16

+0

事實上,據我所知,文件URL方案甚至不需要雙斜線,但只需要一個斜線。儘管在野外都經常看到。 – hippietrail 2012-08-08 13:57:06

+0

https://tools.ietf.org/html/rfc3986#section-3「當權限不存在時,路徑不能以兩個斜槓字符開頭」 – 2016-07-21 04:46:41