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 /),并且仍然显示该目录。