为什么 aFile.toURI().toString() on linux 会有一个斜杠?
Why would aFile.toURI().toString() on linux have a single slash?
Java 奇怪的文件协议处理是怎么回事?
我的意思是在 windows 上 UNC 路径变成了 5 个斜杠,我明白为什么会这样,但是在 linux 上绝对路径变成了 file:/local/path/to/file
那不应该有三个斜杠吗?
我假设 Java 的作者并非无能,那么是否可以解释为什么这是可以接受的?
让我们从 documentation of the URI class:
开始
A hierarchical URI is subject to further parsing according to the syntax
[scheme:
][//
authority][path][?
query][#
fragment]
如您所见,权限是可选的。 the URI specification, section 3:
支持
The scheme and path components are required, though the path may be empty (no characters). When authority is present, the path must either be empty or begin with a slash ("/") character. When authority is not present, the path cannot begin with two slash characters ("//").
A file:
URI 可以 有一个权限分隔符,//
,后面有一个有效的空权限,但它没有用,所以有省略它没有坏处。它仍然是一个完全兼容的 URI。
Java 奇怪的文件协议处理是怎么回事?
我的意思是在 windows 上 UNC 路径变成了 5 个斜杠,我明白为什么会这样,但是在 linux 上绝对路径变成了 file:/local/path/to/file
那不应该有三个斜杠吗?
我假设 Java 的作者并非无能,那么是否可以解释为什么这是可以接受的?
让我们从 documentation of the URI class:
开始A hierarchical URI is subject to further parsing according to the syntax
[scheme
:
][//
authority][path][?
query][#
fragment]
如您所见,权限是可选的。 the URI specification, section 3:
支持The scheme and path components are required, though the path may be empty (no characters). When authority is present, the path must either be empty or begin with a slash ("/") character. When authority is not present, the path cannot begin with two slash characters ("//").
A file:
URI 可以 有一个权限分隔符,//
,后面有一个有效的空权限,但它没有用,所以有省略它没有坏处。它仍然是一个完全兼容的 URI。