TLDR版本:這兩種形式的URI根據RFC 8089是正確的。 ~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~
示例代碼突出了Path的toUri()和文件的toURI返回的值之間的差異()給定文件的方法。打印那些值我的Win10機器上顯示:
path.toUri()=>文件:/// d:/NetBeansProjects/MiscTests/./
file.toUri()=>文件:/ d:/的NetBeansProjects/MiscTests /./
Linux上的結果是相似的:
path.toUri()=>文件:///home/johndoe/IdeaProjects/TestUri/./
file.toUri()=>文件:/家庭/輸入johndoe/IdeaProjects/TestUri /./
因此,唯一的區別是單或三正斜槓以下 「文件:」 中的URI。
從你的鏈接,RFC 8089的附錄B中證實,這兩種形式都是有效的URI:
與空權限的本地文件傳統的文件URI。 這是當今最常用的格式。例如:
* "file:///path/to/file"
ö本地文件與沒有權限 字段 並以斜線「/」開始的絕對路徑的最小表示。例如:
* "file:/path/to/file"
進一步確認這兩個URI形式都是有效的是,要麼可以在瀏覽器中輸入顯示目錄的內容。不過,也有值得注意的幾點:
勇敢是不會接受的URI的單斜線形式的唯一瀏覽器(通過File.toURI給出()的toString()。)。
所有的瀏覽器接受URI的三重斜線形式(如File.toPath()。toUri()。toString())給出的。
如果我使用單斜槓在瀏覽器的地址欄中輸入URI,它將轉換爲三斜槓。奇怪的是,Chrome和Firefox都會在URI中接受任意數量的斜槓(例如file://///////// D:/ NetBeansProjects/MiscTests /),並且仍然顯示該目錄。
File.toURI是正確的。您可以在比較之前通過打印兩個值來手動進行驗證 – Optional