exec语句用来执行存储在字符串或文件中的Python语句,当时学java时就不断想,如果一个方法不断读取自己的内容然后去执行读取到的内容,那应该是一件很有意思的事情
今天学习Python时看到了exec,惊为神器,怎么会有这么好的方法,于是果断去实现自己的想法
下面是我的代码,欢迎批评指正
#!/usr/bin/python import time print('yes.i can') time.sleep(1) f = file('/home/t.py') while True: line = f.readline() if(len(line)==1): break else: exec(line) f.close()
先执行一条打印,然后再去休眠两秒,最后再读取自己文件的内容去执行,可以得到一个死循环
于是我在想java应该也有类似的功能。去网上搜还真找到了
package myPcg6; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.util.Arrays; import java.util.List; import javax.tools.JavaCompiler; 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 source = "public class Main {" + "public static void main(String[] args) {" + "System.out.println("Hello World!");" + "} " + "}"; JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null); StringSourceJavaObject sourceObject = new CompilerTest.StringSourceJavaObject("Main", source); List<StringSourceJavaObject> fileObjects = Arrays.asList(sourceObject); CompilationTask task = compiler.getTask(null, fileManager, null, null, null, fileObjects); boolean result = task.call(); if (result) { System.out.println("Compile succeeded!"); } else { System.out.println("Compile failed!"); } } static class StringSourceJavaObject extends SimpleJavaFileObject { private String content = null; public StringSourceJavaObject(String name, String content) throws URISyntaxException { super(URI.create("string:///" + name.replace('.','/') + Kind.SOURCE.extension), Kind.SOURCE); this.content = content; } @Override public CharSequence getCharContent(boolean ignoreEncodingErrors) throws IOException { return content; } } }
上面是某个大神的代码,http://www.cnblogs.com/fangwenyu/archive/2011/10/12/2209051.html,里面说的很详细,当然这只是工具,会用即可
从上面忽然想到,原来秋招时考试提交的代码大概就是这么处理的吧