什么是路径? (以及其他文件系统事实)

文件系统将文件存储和组织在某种形式的媒体(通常是一个或多个硬盘驱动器)上,以便可以轻松地检索它们。当今使用的大多数文件系统都将文件存储在树(或* hierarchical )结构中。在树的顶部是一个(或多个)根节点。在根节点下,有文件和目录(在 Microsoft Windows 中为 folders *)。每个目录可以包含文件和子目录,而文件和子目录又可以包含文件和子目录,依此类推,其深度可能几乎无限。

本节包括以下内容:

什么是路径?

下图显示了包含单个根节点的示例目录树。 Microsoft Windows 支持多个根节点。每个根节点都 Map 到一个卷,例如C:\D:\。 Solaris OS 支持单个根节点,该节点由斜杠/表示。

samples 目录结构

samples 目录结构

从根节点开始,通过文件在文件系统中的路径来标识文件。例如,上图中的statusReport文件由 Solaris OS 中的以下符号描述:

/home/sally/statusReport

在 Microsoft Windows 中,statusReport由以下符号描述:

C:\home\sally\statusReport

用于分隔目录名称的字符(也称为* delimiter *)特定于文件系统:Solaris OS 使用正斜杠(/),而 Microsoft Windows 使用反斜杠(\)。

相对还是绝对?

路径是* relative absolute *。绝对路径始终包含根元素和查找文件所需的完整目录列表。例如,/home/sally/statusReport是绝对路径。查找文件所需的所有信息都包含在路径字符串 中。

相对路径需要与其他路径组合才能访问文件。例如,joe/foo是相对路径。没有更多信息,程序将无法可靠地在文件系统中找到joe/foo目录。

文件系统对象通常是目录或文件。每个人都熟悉这些对象。但是某些文件系统也支持符号链接的概念。符号链接也称为* symlink soft link *。

符号链接是一个特殊文件,用作对另一个文件的引用。在大多数情况下,符号链接对应用程序是透明的,并且符号链接上的操作会自动重定向到链接的目标。 (指向的文件或目录称为链接的* target *.)在删除符号链接或重命名符号链接的情况下 exception,在这种情况下,链接本身将被删除或重命名,而不是链接的目标。

在下图中,logFile对于用户而言似乎是常规文件,但实际上是dir/logs/HomeLogFile的符号链接。 HomeLogFile是链接的目标。

samples 符号链接

符号链接的示例。

符号链接通常对用户是透明的。读取或写入符号链接与读取或写入任何其他文件或目录相同。

短语“解析链接”表示用文件系统中的实际位置替换符号链接。在示例中,解析logFile产生dir/logs/HomeLogFile

在现实情况下,大多数文件系统都自由使用符号链接。有时,粗心创建的符号链接可能会导致循环引用。当链接的目标指向原始链接时,将发生循环引用。循环引用可能是间接引用:目录a指向目录b,目录c指向目录c,该目录包含一个指向目录a的子目录。当程序递归遍历目录结构时,循环引用可能会造成严重破坏。但是,这种情况已得到考虑,不会导致您的程序无限循环。

下一页讨论了 Java 编程语言Path类对文件 I/O 支持的核心。