JavaNIO。空路

JavaNIO。空路,java,nio,Java,Nio,有人能告诉我路径。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.ou

有人能告诉我路径。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

它映射到运行程序的目录。 将其转换为绝对路径以测试您自己。
System.out.println(path.get(“”.toAbsolutionPath())

/用户/andrew/workspace/scratch

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

从:

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


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

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

您可以通过小更新进行检查:

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


但是为什么它是可执行的呢?“它映射到你程序的根目录”-不,它是你运行它的当前默认目录。当程序在目录B中时,尝试进入目录A,并键入java-cpbMyClass。它将打印A,而不是B。
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());
    }