JavaComplier的使用
来源:互联网 发布:谱尼测试工作强度知乎 编辑:程序博客网 时间:2024/06/05 14:12
JDK1.6提供了JavaCompiler类,此类可以允许开发人员编译java文件为class文件。
import javax.tools.JavaCompiler;import javax.tools.JavaCompiler.*;import javax.tools.StandardJavaFileManager;import javax.tools.ToolProvider;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.net.URL;import java.net.URLClassLoader;/** * Created by admin on 2017/7/31. */public class DefComplier { public static final String code = "package TestComplier;\n" + "\n" + "/**\n" + " * Created by admin on 2017/7/31.\n" + " */\n" + "class HelloWorld {\n" + " public void say(){\n" + " System.out.println(\"Hello World\");\n" + " }\n" + "}"; public static final String currentPath = System.getProperty("user.dir"); public static final String fileName = currentPath+"/src/TestComplier/HelloWorld.java"; public static void main(String[] args) { DefComplier dc = new DefComplier(); dc.writeFile(); try { dc.complier(); dc.loadClazz(); }catch (Exception e){ e.printStackTrace(); } } /*把字符串写成java文件*/ public void writeFile(){ File file = new File(fileName); try{ FileWriter fw = new FileWriter(file); fw.write(code); fw.flush(); fw.close(); }catch (IOException e){ e.printStackTrace(); } } /*编译文件*/ public void complier() throws Exception{ //获得系统编译器,如果使用jre(运行环境)则无法获得编译器 JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); System.out.println(compiler.getClass().getName()); //获得文件管理器 StandardJavaFileManager fileManager = compiler.getStandardFileManager(null,null,null); //可以得到多个可迭代的编译对象 Iterable Files = fileManager.getJavaFileObjects(fileName); //获得编译任务 CompilationTask t = compiler.getTask(null,fileManager,null,null,null,Files); //开始编译,得到class文件 t.call(); fileManager.close(); } /*把class文件加载到内存*/ /*URLClASSloader加载器用于从指向 JAR 文件和目录的 URL 的搜索路径加载类和资源。*/ public void loadClazz() throws Exception { URL[] urls = new URL[]{new URL("file:/" + currentPath + "/src/")}; ClassLoader loader = new URLClassLoader(urls); Class clazz = loader.loadClass("TestComplier.HelloWorld"); HelloWorld h = (HelloWorld)clazz.newInstance(); h.say(); }}
阅读全文
0 0
- JavaComplier的使用
- GUID使用的使用
- ${}的使用
- 的使用
- @[],@()的使用
- ->的使用
- +、-、*、/、%的使用
- &&的使用
- %:的使用
- Makefile中使用$$的使用
- Makefile中使用$$的使用
- Red5的使用--使用日志
- prefernce的使用具体使用
- 【工具使用】git 的使用
- 关于使用AsyncTaskLoader的使用
- 使用CABasicAnimation的基本使用
- 使用RocketMQ的客户端使用
- gulp的使用基本使用
- tomcat8集群实现session共享 nginx负载均衡
- web前端学习日记8
- Can you solve this equation? (二分搜索)解题报告
- 数据类型
- Anaconda的安装及环境配置
- JavaComplier的使用
- eclipse link source Idea对应的用法
- Android6.0之后的权限机制对App开发的影响
- 笔记本外置显示器不清晰的问题解决
- Accessibility Verification Test--无障碍测试简介
- 反射四 操作方法2
- typescript 判断浏览器前后台的切换监听
- Greenplum函数
- java synchronized详解