重定向输入和输出
通过调用脚本上下文的setReader和setWriter重定向标准输入输出。
package 第8章脚本;
import java.io.BufferedWriter;
import java.io.ByteArrayOutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintStream;
import java.io.Writer;
import javax.script.ScriptContext;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class ScriptContextRedirectExampleJDK8 {
public static void main(String[] args) {
// 创建脚本引擎管理器
ScriptEngineManager manager = new ScriptEngineManager();
// 获取 JavaScript 脚本引擎
ScriptEngine engine = manager.getEngineByName("JavaScript");
// 创建一个 ByteArrayOutputStream 用于存储输出
ByteArrayOutputStream baos = new ByteArrayOutputStream();
// 将 ByteArrayOutputStream 包装成 PrintStream 以便打印
PrintStream ps = new PrintStream(baos);
// 获取脚本引擎的上下文
ScriptContext context = engine.getContext();
// 获取原始的输出 Writer
Writer originalOut = context.getWriter();
try {
// 将输出流重定向到自定义的 Writer
context.setWriter(new BufferedWriter(new OutputStreamWriter(ps)));
// 执行脚本
engine.eval("print('Hello, ScriptContext in JDK 1.8!');");
// 恢复原始的输出流
context.setWriter(originalOut);
// 将存储在 ByteArrayOutputStream 中的内容输出
System.out.println(baos.toString());
} catch (ScriptException e) {
e.printStackTrace();
} finally {
// 关闭 PrintStream
ps.close();
}
}
}
//Hello, ScriptContext in JDK 1.8!