动态加载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");
}
}