admin管理员组文章数量:1794759
java实现eval()方法
import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; /** * @author Administrator * 获取进程数据-编译和运行Java代码 * 相当于实现于JS中eval()方法 */ public class DynCompile { public static void main(String[] args) throws Exception { //解析字符串中的内容,将其以java代码的形式执行,并打印出来 String str = "System.out.println(\\"输出文字!\\");"; eval(str); } public static void eval(String str) throws Exception{ /*由于java的最小执行单元是类,如果想要执行该语句,必须为其构建一个完整的类*/ //1-使用StringBuilder拼接一个完成的HelloWorld程序 StringBuilder strB = new StringBuilder(80); strB.append("public class Hello{"); strB.append("public static void main(String[] args){"); strB.append(str); strB.append("}}"); //2-将拼接好的字符串保存到一个Hello.java的文件里 OutputStream out = new FileOutputStream("Hello.java"); out.write(strB.toString().getBytes()); out.close(); System.out.println(); //3-调用java进程来编译Hello.java Process javacProcess = Runtime.getRuntime().exec("javac Hello.java"); //4-读取javac进程中的错误流信 InputStream error = javacProcess.getErrorStream(); //读取流中的数据 byte[] b = new byte[1024]; //对每一个文件中的内容进行复制 int len = -1; while((len=error.read(b))!= -1) { String msg = new String(b,0,len); System.out.println(msg); } //关闭资源 error.close(); //5-调用java进程来运行Hello.class Process javaProcess = Runtime.getRuntime().exec("java Hello"); //6-读取java进程流中的信 InputStream info = javaProcess.getInputStream(); while((len=info.read(b))!=-1) { String msg = new String(b,0,len); System.out.println(msg); } info.close(); //7-删除java和class文件 new File("Hello.java").delete(); new File("Hello.class").delete(); } }
版权声明:本文标题:java实现eval()方法 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686919787a118311.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论