动态编译JAVA代码并执行
Posted 周无极
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态编译JAVA代码并执行相关的知识,希望对你有一定的参考价值。
package com.bjsxt.test; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Writer; import javax.tools.JavaCompiler; import javax.tools.ToolProvider; public class Test { public static void main(String[] args) throws IOException { //通过IO流操作,将字符串存储成一个临时文件(Hi.java),然后调用动态编译方法! String str = "public class Hi {public static void main(String[] args){System.out.println(\"HaHa,sxt!\");}}"; File file=new File("D://Hi.java"); writeFile(file,str); JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); int result = compiler.run(null, null, null, "D://Hi.java"); System.out.println(result==0?"编译成功":"编译失败"); //通过Runtime调用执行类 Runtime run = Runtime.getRuntime(); Process process = run.exec("java -cp D:// Hi"); InputStream in = process.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); String info = ""; while((info=reader.readLine())!=null){ System.out.println(info); } /* try { URL[] urls = new URL[] {new URL("file:/"+"C:/myjava/")}; URLClassLoader loader = new URLClassLoader(urls); Class c = loader.loadClass("HelloWorld"); //调用加载类的main方法 Method m = c.getMethod("main",String[].class); m.invoke(null, (Object)new String[]{}); //由于可变参数是JDK5.0之后才有。 //m.invoke(null, (Object)new String[]{});会编译成:m.invoke(null,"aa","bb"),就发生了参数个数不匹配的问题。 //因此,必须要加上(Object)转型,避免这个问题。 //public static void main(String[] args) } catch (Exception e) { e.printStackTrace(); } */ } private static void writeFile(File file,String str) throws IOException { //1.定义字符输出流对象 Writer fw=new FileWriter(file); BufferedWriter bw=new BufferedWriter(fw); //2.按行写入 bw.write(str); bw.newLine(); bw.write("//我爱你"); bw.flush(); //3.关闭流 fw.close(); System.out.println("写入成功"); } }
以上是关于动态编译JAVA代码并执行的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向Android 逆向通用工具开发 ( Android 平台运行的 cmd 程序类型 | Android 平台运行的 cmd 程序编译选项 | 编译 cmd 可执行程序 )(代码片段