-1

在我的代码中,我有这个指令:

Path p1 = Paths.get("c:\\java\\");

由于 Path 只是一个接口,我想知道 get() 在里面做什么。所以我在 Path.class 中打开了源代码,这就是我发现的:

public static Path get(String first, String... more) {
    return FileSystems.getDefault().getPath(first, more);
}

如您所见,有一个返回路径的 getPath()。所以我打开 FileSystem.class 来查看 getPath,这就是我这次发现的……一个抽象方法:

public abstract Path getPath(String first, String... more);

这怎么可能?这段代码似乎什么也没做,而且还有一个抽象方法,所以我看不到它是如何运行的。有人可以澄清一下吗?

4

2 回答 2

3

当您调用时,FileSystems.getDefault()您将获得 FileSystem 的实现(依赖于操作系统),它有自己的 getPath 实现,以返回自己的 Path 接口实现。

于 2013-05-19T18:41:07.077 回答
0

首先,您查看了错误的实施位置。你看着getPathFileSystem。请注意,正如您所注意到的,FileSystem它本身是一个抽象类,其中getPath被声明为抽象方法。这是因为,必须有一个文件系统提供者通过扩展FileSystem类来实现它的特定机制。例如,当您尝试访问 Unix 或 Windows 上的文件系统时,有一个默认文件系统提供程序可以处理您的所有请求,例如文件创建、目录/文件夹列表等……默认文件系统管理 HDD 上的文件。同样,可能还有另一个文件系统可以管理内存中的文件,例如Google 的 Jimfs

其次,由于getmethod of通过调用Paths返回一个对象,你应该首先深入研究. 这将引导您使用默认文件系统提供程序。如上所述,像 Unix 和 Windows 这样的操作系统有一个默认的文件系统提供程序,并且是各自 JDK/JRE 的一部分。例如,Oracle 的 JDK 有一个默认值。PathFileSystems.getDefault()getDefaultFileSystems

于 2018-04-09T11:32:36.163 回答