【问题标题】:Duplicate Path symbols重复路径符号
【发布时间】:2018-05-06 16:27:35
【问题描述】:

请有人帮我解释\\..\\..\\.\\.路径 中的含义。我知道\\. 是工作目录,\\.. 是工作目录的父目录,但我无法理解它们被复制时的含义。

    Path path = Paths.get("aa\\cc\\..\\..\\b.txt").normalize();
    System.out.println(path);

输出是 b.txt

【问题讨论】:

    标签: java path nio


    【解决方案1】:

    “..”在文件路径中是工作目录的父级,正如您所说的“..”后跟“..”只是意味着转到父级的父级。

    您提供的路径:"aa\\cc\\..\\..\\b.txt""b.txt" 完全相同。路径"aa\\cc\\..\\..\\b.txt" 表示从工作目录开始向下到目录aa 然后向下到cc 然后回到aa 然后回到工作目录然后找到文件b.txt

    【讨论】:

      【解决方案2】:

      文件系统中的每个目录都有一些特殊的内置文件,这些文件始终存在于其中。在 Windows 文件系统上,这包括 ...NULCON. 路径元素是一个特殊的内置目录条目,它引用目录本身。同样,.. 条目是另一个特殊的内置目录条目,它引用其位置的父目录。另一方面,“工作目录”由 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/../../..

      【讨论】:

        猜你喜欢
        • 2016-03-18
        • 2015-07-27
        • 2022-11-22
        • 2018-11-17
        • 2018-10-06
        • 1970-01-01
        • 1970-01-01
        • 2019-01-13
        • 2020-06-05
        相关资源
        最近更新 更多