java基础 ---- 动态加载Java文件

动态加载java文件

package com.m.test;

import java.io.FileWriter;
import java.lang.reflect.Constructor;
import java.net.URL;
import java.net.URLClassLoader;

import javax.tools.JavaCompiler;
import javax.tools.JavaCompiler.CompilationTask;
import javax.tools.JavaFileObject;
import javax.tools.StandardJavaFileManager;
import javax.tools.ToolProvider;

public class Test {

    public static void main(String[] args) throws Exception {
        String str = "TimeHandler.java里面的字符串内容";
        // 采用api编译java文本文件
        String javaFile = "E:\\tmp\\test\\TimeHandler.java";
        FileWriter fw = new FileWriter(javaFile);
        fw.flush();
        fw.close();

        // 编译
        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
        StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
        Iterable<? extends JavaFileObject> compilationUnits1  = fileManager.getJavaFileObjects(javaFile);
        CompilationTask task = compiler.getTask(fw, fileManager, null, null, null, compilationUnits1 );
        task.call();
        fileManager.close();


        // 加载运行 ClassLoader只能加载bin目录下的class文件
        URL[] urls = new URL[] {new URL("file:/E:/tmp/test/")};
        URLClassLoader ucl = new URLClassLoader(urls);
        Class<?> clazz = ucl.loadClass("TimeHandler");
        Constructor<?> constructor = clazz.getDeclaredConstructor(java.lang.String.class);
        Object instance = constructor.newInstance("111");

    }

}

猜你喜欢

转载自blog.csdn.net/miracle_8/article/details/81066560