免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1159 | 回复: 0
打印 上一主题 下一主题

java实现动态编译本地java文件 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-07-01 10:10 |只看该作者 |倒序浏览
动态编译
  1. package file;

  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.io.InputStreamReader;
  6. import java.io.PrintWriter;
  7. import java.io.StringWriter;
  8. import java.lang.reflect.Method;
  9. import java.net.URL;
  10. import java.net.URLClassLoader;

  11. import javax.tools.JavaCompiler;
  12. import javax.tools.StandardJavaFileManager;
  13. import javax.tools.ToolProvider;
  14. import javax.tools.JavaCompiler.CompilationTask;

  15. public class DongTaiBianYi {

  16.     /**
  17.      * @param args
  18.      * @throws Exception
  19.      * ¥-824.40 -824.40
  20.      */
  21.     public static void main(String[] args)  throws Exception {
  22.         // TODO Auto-generated method stub
  23.         DongTaiBianYi dtby = new DongTaiBianYi();
  24.         //dtby.textJavaCompiler();
  25.         //dtby.textStringWrite();
  26.      
  27.     }

  28.     public void textJavaCompiler() throws IOException{
  29.         // 编译程序
  30.         JavaCompiler javaCompiler = ToolProvider.getSystemJavaCompiler();
  31.         int result = javaCompiler.run(null, null, null, "-d","./src/","./src/file/MyText.java");
  32.         System.out.println( result == 0 ? "恭喜编译成功" : "对不起编译失败");
  33.          
  34.     }
  35.      
  36.     public void textStringWrite() throws Exception{
  37.         JavaCompiler complier = ToolProvider.getSystemJavaCompiler();     
  38.         StandardJavaFileManager sjf =   
  39.                 complier.getStandardFileManager(null, null, null);  
  40.         Iterable it = sjf.getJavaFileObjects("D:/Hello.java");
  41.         CompilationTask task = complier.getTask(null, sjf, null, null, null, it);  
  42.         task.call();  //调用创建  ,创建class文件
  43.         sjf.close();  
  44.            
  45.         URL urls[] = new URL[]{ new URL("file:/D:/")}; //储存文件目录的地址
  46.         URLClassLoader uLoad = new URLClassLoader(urls);  //classloader从哪个目录找?
  47.         //uLoad.loadClass("Hello");
  48.         Class c = uLoad.loadClass("Hello");  //找哪个class文件 注意不带后缀名  
  49.         //c.newInstance();  //创建一个实例  
  50.          
  51.         Method method = c.getMethod("printString");
  52.         String string = method.invoke(c.newInstance()).toString();
  53.         System.out.println(string);
  54.     }

  55. }
复制代码
2.Hello.java
  1. package entity;

  2. public class Hello {
  3.      
  4.     public void printString(){
  5.         System.out.println("Hello word!");
  6.     }

  7. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP