在查看java.io.File的源代码的时候,发现有这么一个属性
static private FileSystem fs = FileSystem.getFileSystem();
所有的操作其实都是调用fs的方法,我又看了FileSystem的源码,发现它是一个抽象类,应该是不同的操作系统有不同的实现类,但是我不知道具体的过程是什么样的,希望大神能够赐教!!!!解释一下具体过程,是在JVM中实现的么?
------解决方案--------------------
是的,在 JVM 中实现的,实现代码是 C 语言的,截录如下:
Windows 平台
#include <windows.h>
#include "jni.h"
#include "jni_util.h"
extern jboolean onNT;
extern void initializeWindowsVersion();
JNIEXPORT jobject JNICALL
Java_java_io_FileSystem_getFileSystem(JNIEnv *env, jclass ignored)
{
initializeWindowsVersion();
if (onNT) {
return JNU_NewObjectByName(env, "java/io/WinNTFileSystem", "()V");
} else {
return JNU_NewObjectByName(env, "java/io/Win32FileSystem", "()V");
}
}
Linux/Unix 实现
#include "jni.h"
#include "jni_util.h"
#include "java_io_FileSystem.h"
JNIEXPORT jobject JNICALL
Java_java_io_FileSystem_getFileSystem(JNIEnv *env, jclass ignored)
{
return JNU_NewObjectByName(env, "java/io/UnixFileSystem", "()V");
}
上面的 java/io/WinNTFileSystem、java/io/Win32FileSystem、java/io/UnixFileSystem 都是由 C 语言实现的