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")));
我在 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")));