zoukankan      html  css  js  c++  java
  • javaCompiler简析

    javaCompiler简单来说就是一个用来调用java语言编译器的接口,我们使用它可以实现对其他路径下或者远程代码的编译。

    显然我们可以实现这样一种操作,将一串符合java语法的字符串写入一个java文件中。然后利用javaCompiler编译此文件。最后通过

    反射的方法实现对此文件的运行(online judge)。

    public static void main(String[] args) throws Exception {
            /**
             * 将 string 写入Hello.java中
             * 通过文件输出流
             */
            String string = "public class Hello { public static void main(String []args){System.out.println("Hello");}}";
            File file = new File("C:\Users\Administrator\Desktop\temp\Hello.java");
            if (!file.exists()) {
                file.createNewFile();
            }
            byte[] bytes = string.getBytes();
            FileOutputStream stream = new FileOutputStream(file);
            stream.write(bytes, 0, bytes.length);
            stream.close();
            /**
             * 编译Hello.java
             * 通过反射调用main函数实现函数的运行
             */
            JavaCompiler javaCompiler = ToolProvider.getSystemJavaCompiler();
            int result = javaCompiler.run(null, null, null, "C:\Users\Administrator\Desktop\temp\Hello.java");
            System.out.println(result == 0 ? "success" : "failure");
            URL[] urls = new URL[]{new URL("file:/" + "C:/Users/Administrator/Desktop/temp/")};
            URLClassLoader classLoader = new URLClassLoader(urls);
            Class c = classLoader.loadClass("Hello");
            System.out.println(c.getName());
            Method method = c.getDeclaredMethod("main", String[].class);
            method.invoke(null,  (Object) new String[]{"aa","bb"});
        }
  • 相关阅读:
    值类型引用类型的区别(转)
    聚集索引和非聚集索引(转)
    使用docker安装nginx并配置端口转发
    jenkins选择分支构建
    创建好docker后不能apt-get update解决方法
    Docker开启Remote API 访问 2375端口
    Docker加速配置
    Docker下载安装
    进入Docker 容器 docker exec [CONTAINER ID] bin/bash报错问题
    定时删除日志文件---linux定时清理日志
  • 原文地址:https://www.cnblogs.com/hanxue112253/p/13298125.html
Copyright © 2011-2022 走看看