【问题标题】:Java nio. Empty path爪哇尼奥。空路径
【发布时间】:2017-03-15 02:06:50
【问题描述】:

谁能告诉我Paths.get("") 指向哪里?

这是代码和输出。

public static void main(String[] args) {
    Path path = Paths.get("");
    System.out.printf("`%s`%n", path);
    System.out.printf("`%s`%n", path.normalize());
    System.out.println(Files.exists(path));
    System.out.println(Files.isExecutable(path));
}

``
``
true
true

【问题讨论】:

    标签: java nio


    【解决方案1】:

    它映射到您运行程序的目录。 将其转换为绝对路径来测试自己。 System.out.println(Paths.get("").toAbsolutePath());

    【讨论】:

    • 但为什么它是可执行的?
    • “它映射到你程序的根目录”——不,它是你运行它的当前默认目录。当程序在目录 B 中时,尝试进入目录 A,然后键入 java -cp B MyClass。它将打印 A,而不是 B。
    【解决方案2】:

    正如文档所述,它具有指向现有文件系统的链接:

    使用它意味着对默认文件系统的假定引用并限制调用代码的实用性

    您可以检查小更新:

    public static void main(String[] args) {
            Path path = Paths.get("");
    
            System.out.printf("`%s`%n", path);
            System.out.printf("`%s`%n", path.normalize());
            System.out.println(Files.exists(path));
            System.out.println(Files.isExecutable(path));
    
            System.out.println(path.toFile().getAbsolutePath());
        }
    

    最后的输出是这样的:

    C:\Users\Nazar\Projects\IdeaProjects\test-project

    【讨论】:

      【解决方案3】:
      System.out.println(Paths.get("").toAbsolutePath());
      

      /用户/andrew/workspace/scratch

      看起来它是当前工作目录。在我的机器上,Java 报告它是可执行的,因为目录上的“x”标志对于当前用户来说是真的。

      来自javadocs

      此方法检查文件是否存在以及此 Java 虚拟机是否具有执行该文件的适当权限。检查对目录的访问时,语义可能会有所不同。例如,在 UNIX 系统上,检查执行访问会检查 Java 虚拟机是否有权搜索目录以访问文件或子目录。

      【讨论】:

        猜你喜欢
        • 2020-07-25
        • 2023-03-04
        • 1970-01-01
        • 2012-12-27
        • 2011-07-23
        • 2011-06-30
        • 2016-02-16
        • 2012-08-15
        • 1970-01-01
        相关资源
        最近更新 更多