在我的代码中,我有这个指示:
Path p1 = Paths.get("c:\\java\\");
作为Path只是一个界面,我想知道get()在里面做了什么。所以我在Path.class中打开了源代码,这是我找到的:
public static Path get(String first, String... more) {
return FileSystems.getDefault().getPath(first, more);
}
如您所见,有一个返回Path的getPath()。所以我打开FileSystem.class来查看getPath,这是我这次发现的...抽象方法:
public abstract Path getPath(String first, String... more);
怎么可能?这段代码似乎什么都不做,而且还有一种抽象方法,所以我无法看到它是如何运行的。有人可以澄清一下吗?
答案 0 :(得分:2)
当你调用FileSystems.getDefault()
时,你获得了一个FileSystem(依赖于操作系统)的实现,它有自己的getPath实现,返回它自己的Path接口实现。
答案 1 :(得分:0)
首先,你看错了地方进行实施。您查看了getPath
课程的FileSystem
。请注意,FileSystem
本身是一个抽象类,其中getPath
被声明为抽象方法,正如您所注意到的那样。这是因为,必须有一个文件系统提供程序,它通过扩展FileSystem
类来实现它的特定机制。例如,当您尝试在Unix或Windows上访问文件系统时,会有一个默认的文件系统提供程序来处理您的所有请求,如文件创建,目录/文件夹列表等...默认文件系统管理HDD上的文件。同样,可能有另一个文件系统可能管理内存中的文件,如Google's Jimfs。
其次,当get
的{{1}}方法通过调用Paths
返回Path
对象时,您应该首先深入研究FileSystems.getDefault()
getDefault
方法}}。这将导致您进入默认文件系统提供程序。如上所述,Unix和Windows等操作系统具有默认文件系统提供程序,并且是相应JDK / JRE的一部分。例如,Oracle的JDK有一个默认值。