定义
该接口说明了有关根的以下内容:
也可能存在标识文件系统层次结构的根组件。
如您所见,该注释似乎暗示根用于文件系统层次结构。现在我们必须推理什么是绝对路径。该界面告诉我们以下内容:
绝对路径是完整的,因为它不需要与其他路径信息结合来定位文件。
因此,如您所见,关于绝对路径的定义中没有关于根的词。唯一的限制是我们必须能够在没有更多信息的情况下找到文件。
分层文件系统
大多数文件系统是分层的,即它们是树(如果我们考虑链接,则为图)或森林。树中的根是不是另一个节点(不包括链接)的子节点的节点。例如,Windows 文件系统是林,因为它们有许多根 ( C:
, D:
,...)。Linux 通常只有一个根,即/
. 根非常重要,因为没有它们就很难开始查找文件。在这样的文件系统中,您通常可以依赖每个具有根的绝对路径。
非分层文件系统
只要我们有一个分层文件系统,我们就可以预测绝对路径中的根,但是如果我们没有根怎么办?然后,绝对路径可能不包含根。
我想到的一个例子:像Chord这样的分布式文件系统。这些通常不是分层的,因此根的含义通常是未定义的。相反,文件哈希标识文件(Chord 中的 SHA-1)。因此,有效的 Chord 路径可能如下所示:
cf23df2207d99a74fbe169e3eba035e633b65d94
这是一条绝对路径。无需进一步信息即可检索相关文件,因此路径是绝对的。但是,我看不到根。我们可以将整个哈希定义为它自己的根(然后每个文件都将是它自己的根),但是没有人能保证每个实现 Chord 文件系统的人都会同意这一点。因此,可能存在不将这些哈希视为根的合理实现。在这样的文件系统中,每个路径都是绝对路径,但没有一个路径包含根。
如果我要实现非分层文件系统,我将始终null
以 root 身份返回,因为恕我直言,root 在非分层文件系统中不是定义的概念。既然我是这样想的,其他开发者可能也会这么想。因此,您可能不会假设每个绝对路径都有一个根。
请注意,分布式文件系统在许多领域都很常见,因此这不仅仅是一个永远不会实现的极端情况。我认为你必须预料到它。
结论
- 该接口不要求每个绝对路径必须有一个根
- 有合理的文件系统,其中没有根是有意义的
- 评论中提到的 Oracle 教程不是该接口的合同。你不应该依赖这个
所以会有人实现没有根的文件系统;你应该预料到这一点。