FileReader找不到R脚本

时间:2017-09-18 12:57:01

标签: r maven javafx filereader renjin

我尝试在JavaFx中运行我的R脚本。我为此目的使用Renjin,它似乎与我在内部运行的语句一起正常工作。但我想运行一个外部R脚本。该项目是使用Maven设置的,因此路径应该很容易,因为R脚本位于资源文件夹中。当我加载FXML文件时路径有效,所以我很困惑为什么它找不到我的脚本。

这是一个简短的例子:

package survey;

import javax.script.*;
import org.renjin.script.*;
import java.io.FileReader;

public class calcFunction {

  public static void main(String[] args) throws Exception {
    // create a script engine manager:
    RenjinScriptEngineFactory factory = new RenjinScriptEngineFactory();
    // create a Renjin engine:
    ScriptEngine engine = factory.getScriptEngine();

    engine.put("x", 4);
    engine.put("y", 5);

    engine.eval(new FileReader("/test.R"));
  }

}

缺少什么?提前谢谢!

EDIT1:

使用我的FXML文件,它可以使用“/”路径,如下所示:

 root = FXMLLoader.load(getClass().getResource("/moduleDa.fxml"));   

EDIT2:

删除评论的人建议:

engine.eval(new FileReader(new File(".").getAbsolutePath()+"/test.R"));

如果脚本位于pom.xml文件所在的根目录中,则它可以正常工作。 @James_D使它工作,所以R脚本可以位于资源文件夹中 - 非常感谢!

1 个答案:

答案 0 :(得分:1)

如果您的R脚本作为应用程序的一部分捆绑在一起,则无法将其视为文件 - 您需要将其视为资源。通常,您将应用程序部署为Jar文件,资源将是该jar文件中的元素(它们本身不会成为文件)。

所以只需将R脚本视为资源并加载它即可。我不知道renjin框架,但我认为ScriptEngine这里是javax.script.ScriptEngine,在这种情况下ScriptEngine.eval(...)Reader作为参数,等等(如果您的R脚本位于类路径的根目录中,则可以执行

engine.eval(new InputStreamReader(getClass().getResourceAsStream("/test.R")));