• java动态编译运行代码


    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.net.URI;
    import java.util.Arrays;
    import javax.tools.JavaCompiler;
    import javax.tools.JavaFileObject;
    import javax.tools.SimpleJavaFileObject;
    import javax.tools.StandardJavaFileManager;
    import javax.tools.ToolProvider;
    import javax.tools.JavaCompiler.CompilationTask;
    public class CompilerTest {
     public static void main(String[] args) throws Exception {
            String CLASSNAME = "TestClass";
      String source = "public class " + CLASSNAME +" { public static void main(String[] args) {System.out.println(/"Hello World!/");} }";
      JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
      StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
      JavaSourceFromString sourceObject = new JavaSourceFromString(CLASSNAME,source);
      Iterable<? extends JavaFileObject> fileObjects = Arrays.asList(sourceObject);
      CompilationTask task = compiler.getTask(null, fileManager, null, null,null, fileObjects);
      boolean result = task.call();
      if (result) {
       System.out.println("编译成功。");
       Runtime r = Runtime.getRuntime();
       Process p = r.exec("java " + CLASSNAME);
       BufferedReader br = new BufferedReader(new InputStreamReader(p
         .getInputStream()));
       StringBuffer sb = new StringBuffer();
       String inline;
       while (null != (inline = br.readLine())) {
        sb.append(inline).append("/n");
       }
       System.out.println(sb.toString());
      }
     }
    }
    class JavaSourceFromString extends SimpleJavaFileObject {
     final String code;
     JavaSourceFromString(String name, String code) {
      super(URI.create("string:///" + name.replace('.', '/')+ Kind.SOURCE.extension), Kind.SOURCE);
      this.code = code;
     }
     public CharSequence getCharContent(boolean ignoreEncodingErrors) {
      return code;
     }
    }

  • 相关阅读:
    If选择结构
    三元运算符
    顺序结构
    键盘输入使用
    逻辑运算符
    关系运算符
    自增自减运算符
    《黑客与画家》阅读笔记1
    周总结1
    2020年秋季个人阅读计划
  • 原文地址:https://www.cnblogs.com/yangchongxing/p/7642434.html
Copyright © 2020-2023  润新知