【发布时间】:2018-05-06 16:27:35
【问题描述】:
请有人帮我解释\\..\\.. 或\\.\\. 在路径 中的含义。我知道\\. 是工作目录,\\.. 是工作目录的父目录,但我无法理解它们被复制时的含义。
Path path = Paths.get("aa\\cc\\..\\..\\b.txt").normalize();
System.out.println(path);
输出是 b.txt
【问题讨论】:
请有人帮我解释\\..\\.. 或\\.\\. 在路径 中的含义。我知道\\. 是工作目录,\\.. 是工作目录的父目录,但我无法理解它们被复制时的含义。
Path path = Paths.get("aa\\cc\\..\\..\\b.txt").normalize();
System.out.println(path);
输出是 b.txt
【问题讨论】:
“..”在文件路径中是工作目录的父级,正如您所说的“..”后跟“..”只是意味着转到父级的父级。
您提供的路径:"aa\\cc\\..\\..\\b.txt" 与 "b.txt" 完全相同。路径"aa\\cc\\..\\..\\b.txt" 表示从工作目录开始向下到目录aa 然后向下到cc 然后回到aa 然后回到工作目录然后找到文件b.txt。
【讨论】:
文件系统中的每个目录都有一些特殊的内置文件,这些文件始终存在于其中。在 Windows 文件系统上,这包括 .、..、NUL 和 CON。 . 路径元素是一个特殊的内置目录条目,它引用目录本身。同样,.. 条目是另一个特殊的内置目录条目,它引用其位置的父目录。另一方面,“工作目录”由 shell 维护,并自动用作提供给它的任何相对路径的路径根。
所以. 似乎只是“工作目录”,因为指定它将相对于 shell 维护的工作目录——就像“readme.txt”是工作目录。这 '。'可以出现在路径中的任何位置(不必要地)引用该位置的目录。 .. 似乎可以从其位置引用父目录“1 up”。
所以,例如:
/home/jdoe/.
指的是目录/home/jdoe。同样.. 是目录的父级。所以:
/home/jdoe/..
指jdoe 的父级,即/home。
您有时可以将它们链接到您的内心深处,因此以下所有路径语句都指向完全相同的目录(即 /home/jdoe):
/home/jdoe
/home/jdoe/.
/home/jdoe/././././.
/home/jdoe/../jdoe
/home/jdoe/subdir/..
Java 路径 normalize 函数会删除所有的 '.'和 '..' 部分并相应地修改路径以简化路径而不改变它的实际结束位置。
请注意,“..”可能允许您创建尝试在根目录之上运行的无效路径。如/home/jdoe/../../..。
【讨论】: