Java调用各种脚本

脚本语言的支持
JSR223中规范了在Java虚拟机上运行的脚本语言与Java程序之间的交互方式。JSR233是JavaSE6的一部分,在Java表中API中的包是javax.script。目前Java虚拟机支持比较多的脚本语言,比较流行的有JavaScript、Scala、JRuby、Jython和Groovy等。

脚本包
Java 脚本功能是在 javax.script 包中。这是一个比较小的,简单的API。脚本的出发点是 ScriptEngineManager 类。一个 ScriptEngineManager 对象可以通过jar文件的服务发现机制发现脚本引擎。它也可以实例化脚本引擎来解释使用特定的脚本语言编写的脚本。使用脚本编程接口的最简单的方法如下:
1.创建一个 ScriptEngineManager 对象
2.从 ScriptEngineManager 获取 ScriptEngine 对象
3.使用 ScriptEngine的eval方法执行脚本

看几个例子

例1,”HELLO WORLD”

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;

/**
 * 第一个例子, 执行脚本输出"Hello,World"
 * 通过 getEngineByName 方法得到一个JavaScript引擎实例。通过脚本引擎的eval方法来执行给定的JavaScript代码。
 */

public class EvalScript {

    public static void main(String[] args) throws Exception {
        // create a script engine manager
        ScriptEngineManager factory = new ScriptEngineManager();
        // create a JavaScript engine
        ScriptEngine engine = factory.getEngineByName("JavaScript");
        // evaluate JavaScript code from String
        engine.eval("print('Hello, World')");
    }

}

例2,执行脚本文件

/**
 * 执行一个脚本文件
 *
 * 调用eval方法来接收java.io.Reader作为输入源, 读入的脚本被执行。
 */
public class EvalFile {


    public static void main(String[] args) throws Exception {
        // create a script engine manager
        ScriptEngineManager factory = new ScriptEngineManager();
        // create JavaScript engine
        ScriptEngine engine = factory.getEngineByName("JavaScript");
        // evaluate JavaScript code from given file - specified by first argument
        engine.eval(new java.io.FileReader(args[0]));
    }


}

例3,脚本变量

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import java.io.File;


/**
 * 脚本变量
 * 当你的java应用程序嵌入脚本引擎和脚本时,你可能希望将您的应用程序中的对象作为全局变量暴露于脚本中。
 */
public class ScriptVars {

    public static void main(String[] args) throws Exception {
        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByName("JavaScript");

        File f = new File("test.txt");
        // expose File object as variable to script
        engine.put("file", f);

        // evaluate a script string. The script accesses "file"
        // variable and calls method on it
        engine.eval("print(file.getAbsolutePath())");
    }

}

参考:
Java语言的动态性支持(一)ScriptEngineManager
怎么通过java去调用并执行shell脚本以及问题总结
Java 脚本化编程指南

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页