FileReader 找不到 R 脚本

FileReader can't find R Script

我在 JavaFx 中尝试 运行 我的 R 脚本。为此,我使用 Renjin,它似乎可以在内部使用语句 I 运行 正常工作。但我想要 运行 一个外部 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"));
  }

}

是不是少了什么?提前致谢!

编辑 1:

对于我的 FXML 文件,它可以像这样使用“/”路径:

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

编辑 2:

有人删除了他的评论提出了这个:

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

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

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

因此,只需将 R 脚本视为一种资源并按原样加载它。我不知道 renjin 框架,但我假设 ScriptEngine 这里是一个 javax.script.ScriptEngine,在这种情况下 ScriptEngine.eval(...) 需要一个 Reader 作为参数,所以(如果你R 脚本位于 class 路径的根目录)你可以做

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