概述
package com.kenick.util;
import java.io.File;
import java.io.FileOutputStream;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
/**
* @ClassName EvalUtil
* @Description TODO
* @author kick
* @date 2017年2月7日 下午3:18:16
*/
public class EvalUtil {
public static void eval(String code) throws Exception{
// 将待编译代码写入到临时java文件中
String javaFile = "d:/EvalUtilTemp.java";
File javaSourceFile = new File(javaFile);
File javaClassFile = new File("d:/EvalUtilTemp.class");
if(!javaSourceFile.exists()){
javaSourceFile.createNewFile();
}
FileOutputStream fileOutputStream = new FileOutputStream(javaSourceFile);
String javaString =
"public class EvalUtilTemp {"+
"
public static void exec() {"+
code+
"}"+
"}";
fileOutputStream.write(javaString.getBytes());
fileOutputStream.close();
// 编译java代码
Process exec = Runtime.getRuntime().exec("javac "+ javaFile);
exec.waitFor();
int exitValue = exec.exitValue();
if(exitValue==0){
System.out.println("编译成功!");
}else{
System.out.println("编译失败");
}
// 加载Class文件
URL[] urls = {new URL("file:d:/")};
URLClassLoader urlClassLoader = new URLClassLoader(urls);
Class<?> EvalUtilTemp = urlClassLoader.loadClass("EvalUtilTemp");
Method execMethod = EvalUtilTemp.getMethod("exec", null);
System.out.println("开始执行如何代码:");
System.out.println(code);
System.out.println("---------start----------");
Object ret = execMethod.invoke(null, null);
System.out.println("---------end-----------");
if(ret !=null){
System.out.println("代码执行返回值为:"+ret);
}
//清理临时文件
if(javaSourceFile.exists()){
javaSourceFile.delete();
}
if(javaClassFile.exists()){
javaClassFile.delete();
}
}
public static void main(String[] args) throws Exception {
EvalUtil.eval("System.out.println("aa");");
}
}
程序执行结果:
最后
以上就是沉静书包为你收集整理的eval( )方法动态运行一行或多行程序代码。的全部内容,希望文章能够帮你解决eval( )方法动态运行一行或多行程序代码。所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复