当前位置: 代码迷 >> J2SE >> 关于FileSystem的有关问题,求大神指教!
  详细解决方案

关于FileSystem的有关问题,求大神指教!

热度:19   发布时间:2016-04-23 21:02:14.0
关于FileSystem的问题,求大神指教!!!!
在查看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 语言实现的