一丶命令行
// 执行命令行操作
ProcessBuilder processBuilder = new ProcessBuilder("ipconfig");
processBuilder.redirectErrorStream(true);
try {
Process start = processBuilder.start();
// 读取执行结果
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(start.getInputStream(), "GBK"));
StringBuilder builder = new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null) {
builder.append(line).append("n");
}
System.out.println(builder);
} catch (Exception e) {
e.printStackTrace();
}
二丶Groovy脚本
public static void main(String[] args) {
testJava();
testscript();
testFilescript();
}
private static void testJava() {
// java代码,可以从数据库,文件等一些地方读取,实现动态改变代码
String java = "import com.example.cachedemo.GroovyDemo;" +
"public class Test {" +
"public static boolean test(){return GroovyDemo.test();}" +
"}";
// 加载类
GroovyClassLoader classLoader = new GroovyClassLoader();
Class aClass = classLoader.parseClass(java);
System.out.println(aClass);
try {
// 获取执行的方法
Method testMethod = aClass.getMethod("test");
// 执行方法,这里定义的是静态方法,不是静态方法,需要创建对象执行
Object invoke = testMethod.invoke(aClass);
System.out.println(invoke);
} catch (Exception e) {
e.printStackTrace();
}
}
private static void testscript() {
// 使用groovy脚本
// 参数绑定
Binding binding = new Binding();
binding.setProperty("c", "property");
GroovyShell groovyShell = new GroovyShell(binding);
// 该脚本实现打印aaa, 和返回绑定的参数 $c是获得上面绑定的参数,最后一行的结果时默认返回值
Object evaluate = groovyShell.evaluate("println 'aaa'n" +
""$c"");
// 这里输出property
System.out.println(evaluate);
// def定义变量 1后面跟g代表这个变量是BigInteger类型,还有其它的类型,可以自行查找
// assert断言变量是不是BigInteger类型,不是会抛出异常,终止程序
groovyShell.evaluate("def name = 1gn" +
"assert name instanceof BigInteger");
// 定义一个test方法 {}是groovy的闭包写法,it是不指定参数的时候的默认参数名 调用test方法
groovyShell.evaluate("def test = {println it}n" +
"test('aaa')");
}
// 脚本内容 hello.groovy
// groovy脚本中自动引入GroovyShell等一些类,在脚本中又能嵌套脚本
GroovyShell shell = new GroovyShell()
// 动态修改这些,会自动加载,改变执行结果
// shell.evaluate('''
// def count = 0
// for(item in 1..10) {
// count += item
// println item
// }
// ''')
// 输出绑定的参数
println "$a"
// 这里会返回到java代码中,在java代码中获取执行结果
return [c:"1", d: "2"]
private static void testFilescript() {
try {
// GroovyscriptEngine这个可以监听脚本的变化,脚本变化后会重新执行新的代码,参数是脚本所在的目录
GroovyscriptEngine scriptEngine = new GroovyscriptEngine("C:\tmp\groovy");
Binding binding = new Binding();
// 循环,脚本变化后执行结果也跟着改变
while (true) {
// 参数 在脚本中通过$加参数名获取 例如:$a就能获取1
binding.setVariable("a", 1);
binding.setVariable("b", 2);
// 执行的脚本名字
Object run = scriptEngine.run("hello.groovy", binding);
// 脚本的返回结果
System.out.println(run);
Thread.sleep(5000);
}
} catch (Exception e) {
e.printStackTrace();
}
}