简单动态编译

package com.test;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.lang.reflect.Method;

import com.sun.tools.javac.Main;//tools.jar  jdk下的lib

public class MyTest {

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws Exception {
	//	String s =System.getProperty( "user.dir");
		System.out.println(eval("(5-3*3)*2"));
	}

	
	public static Object eval(String str) throws IOException, Exception{
		   //生成java文件
		   String s = "package com.test; public class Temp{public int rt(){ return "+str+"; } }";

		   File f = new File("Temp.java");
		   PrintWriter pw = new PrintWriter(new FileWriter(f));
		   pw.println(s);
		   pw.close();
		   //动态编译
		   Main javac = new Main();
		   String[] cpargs = new String[] {"-d", System.getProperty( "user.dir")+"/bin","Temp.java"};
		   int status = javac.compile(cpargs);
		   if(status!=0){
		      System.out.println("没有成功编译源文件!");
		      return null;
		   }
		   //调用Temp的rt方法返回结果:
		   MyTest mc = new MyTest();
		   Class clasz = mc.getClass().forName("com.test.Temp");
		   Method rt = clasz.getMethod("rt");
		   return rt.invoke(clasz.newInstance());
		 
		}

}



你可能感兴趣的:(java,动态编译,四则运算)