文档

Java™ 教程-Java Tutorials 中文版
什么是路径?(和其他文件系统事实)
Trail: Essential Classes
Lesson: Basic I/O
Section: File I/O (Featuring NIO.2)

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

文件系统以某种形式存储和组织在某种形式的媒体上的文件,通常是一个或多个硬盘驱动器,以便可以容易地获取它们。目前使用的大多数文件系统都将文件存储在树(或 hierarchical (分层))结构中。在树的顶部是一个(或多个)根节点。在根节点下,有 files (文件)和 directories (目录)(Microsoft Windows 中的 folders)。每个目录都可以包含文件和子目录,而这些文件和子目录又可以包含文件和子目录,等等,可能达到几乎无限的深度。

本节包括以下内容:

什么是路径?

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

示例目录结构

示例目录结构

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

/home/sally/statusReport

在 Microsoft Windows 中,statusReport 由以下表示法描述:

C:\home\sally\statusReport

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

相对还是绝对?

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

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

符号链接

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

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

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

示例符号链接

符号链接的示例。

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

短语 resolving a link 意味着用文件系统中的实际位置替换符号链接。在该示例中,解析 logFile 会产生 dir/logs/HomeLogFile

在实际场景中,大多数文件系统都可以自由使用符号链接。偶尔,粗心创建的符号链接可能会导致循环引用。当链接的目标指向原始链接时,会发生循环引用。循环引用可能是间接引用:目录 a 指向目录 b,它指向目录 c,其中包含指向目录的子目录 a。当程序递归地遍历目录结构时,循环引用可能会导致严重破坏。但是,这个场景已经考虑过了,不会导致程序无限循环。

下一页将讨论 Java 编程语言中文件 I/O 支持的核心,即 Path 类。


Previous page: File I/O (Featuring NIO.2)
Next page: The Path Class