我如何可以加载嵌入犀牛本地文件?(How can I load a local file from

2019-10-17 05:49发布

我使用Rhino的context.evaluateString()从Java中的内部运行一些简单的JavaScript。 这是教科书右出的嵌入的JavaScript指南 :

String script = // simple logic
Context c = new ContextFactory().enterContext();
ScriptableObject scope = context.initStandardObjects();
Object o = context.evaluateString(scope, script, "myScript", 1, null);
ScriptableObject result = Context.jsToJava(o, ScriptableObject.class);

我不知道这是当前的最佳实践,因为主要的犀牛文档似乎是下降的,但它的工作至今。

我希望能够引用到库的工作目录-我看到犀牛外壳支持load ,但我不认为这部作品在嵌入引擎。

这可能吗? 难道它记录任何地方? 理想情况下,我想能够只是调用类似load('other.js')并把它搜索目录我指定的全局属性。

Answer 1:

我有一个排序的答案,我不很喜欢,不仅是因为它暴露了什么,我敢肯定的是,让我抓狂的最后半小时犀牛错误:

eval("" + Packages.org.apache.commons.io.FileUtils.readFileToString(
  new java.io.File("/the/local/root", "script.js");
));

{那"" + ...是我如何解决这个错误-如果你eval()一个Java String (如从返回readFileToString调用)没有它手动强迫到JavaScript本地字符串,好像没有任何反应。 呼叫只是默默地失败。 }

这种盲目读取任意文件和evals它-当然,这是当你你做什么eval()从Java的一面,所以我不担心太多。

不管怎么说,这是不优雅了许多原因,但它的工作原理 。 我很乐意听到一个更好的答案!



文章来源: How can I load a local file from embedded Rhino?