如何从java执行R脚本文件

如何从java执行R脚本文件,java,r,rserve,jri,Java,R,Rserve,Jri,我想从Java调用一个R脚本。我在谷歌上搜索过这个主题,但我看到的几乎所有结果都要求我向某个第三方库添加依赖项。有人能告诉我一个好方法来完成同样的事情而不给我的代码添加任何依赖项吗 我正在设置一个新的应用程序,它使用以下代码行从java运行R脚本文件 Runtime.getRuntime().exec("C:\\Users\\Thiru\\Desktop helloWorld.R"); 但当我运行应用程序时,会出现以下异常: SEVERE: Servlet.service() for serv

我想从Java调用一个R脚本。我在谷歌上搜索过这个主题,但我看到的几乎所有结果都要求我向某个第三方库添加依赖项。有人能告诉我一个好方法来完成同样的事情而不给我的代码添加任何依赖项吗

我正在设置一个新的应用程序,它使用以下代码行从java运行R脚本文件

Runtime.getRuntime().exec("C:\\Users\\Thiru\\Desktop helloWorld.R");
但当我运行应用程序时,会出现以下异常:

SEVERE: Servlet.service() for servlet [RenjinServlet] in context with 
path 
[/REngineCheck] threw exception
java.io.IOException: Cannot run program "C:\Users\Thiru\Desktop": 
CreateProcess error=5, Access is denied
at java.lang.ProcessBuilder.start(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at org.r.Check.RenjinServlet.doGet(RenjinServlet.java:102)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at 

org.apache.catalina.core.ApplicationFilterChain.internalDoFilter 
(ApplicationFilterChain.java:291)
at 
org.apache.catalina.core.ApplicationFilterChain.doFilter
(ApplicationFilterChain.java:206)
at org.apache.tomcat.websocket.server.WsFilter.doFilter (WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter 
(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter 
(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke 
(StandardWrapperValve.java:217)
at org.apache.catalina.core.StandardContextValve.invoke 
(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke 
(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke 
(StandardHostValve.java:142)
at org.apache.catalina.valves.ErrorReportValve.invoke 
(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke 
(AbstractAccessLogValve.java:616)
at org.apache.catalina.core.StandardEngineValve.invoke 
(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service 
(CoyoteAdapter.java:518)
at org.apache.coyote.http11.AbstractHttp11Processor.process 
(AbstractHttp11Processor.java:1091)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process 
(AbstractProtocol.java:673)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun 
(NioEndpoint.java:1500)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run 
 (NioEndpoint.java:1456)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run 
  (TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
Caused by: java.io.IOException: CreateProcess error=5, Access is denied
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(Unknown Source)
at java.lang.ProcessImpl.start(Unknown Source)
... 28 more
SEVERE:Servlet.service()用于具有
路径
[/REngineCheck]引发异常
java.io.IOException:无法运行程序“C:\Users\Thiru\Desktop”:
CreateProcess错误=5,访问被拒绝
位于java.lang.ProcessBuilder.start(未知源)
位于java.lang.Runtime.exec(未知源)
位于java.lang.Runtime.exec(未知源)
位于java.lang.Runtime.exec(未知源)
位于org.r.Check.RenjinServlet.doGet(RenjinServlet.java:102)
位于javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
位于javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
在
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
(ApplicationFilterChain.java:291)
在
org.apache.catalina.core.ApplicationFilterChain.doFilter
(ApplicationFilterChain.java:206)
位于org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
(ApplicationFilterChain.java:239)
位于org.apache.catalina.core.ApplicationFilterChain.doFilter
(ApplicationFilterChain.java:206)
在org.apache.catalina.core.StandardWrapperValve.invoke上
(StandardWrapperValve.java:217)
在org.apache.catalina.core.StandardContextValve.invoke上
(StandardContextValve.java:106)
位于org.apache.catalina.authenticator.AuthenticatorBase.invoke
(AuthenticatorBase.java:502)
在org.apache.catalina.core.StandardHostValve.invoke上
(StandardHostValve.java:142)
在org.apache.catalina.valves.ErrorReportValve.invoke上
(ErrorReportValve.java:79)
在org.apache.catalina.valves.AbstractAccessLogValve.invoke上
(AbstractAccessLogValve.java:616)
在org.apache.catalina.core.StandardEngineValve.invoke上
(StandardEngineValve.java:88)
位于org.apache.catalina.connector.CoyoteAdapter.service
(CoyoteAdapter.java:518)
位于org.apache.coyote.http11.AbstractHttp11Processor.process
(AbstractHttp11Processor.java:1091)
位于org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process
(AbstractProtocol.java:673)
位于org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun
(NioEndpoint.java:1500)
在org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run上
(NioEndpoint.java:1456)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(未知源)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(未知源)
位于org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run
(TaskThread.java:61)
位于java.lang.Thread.run(未知源)
原因:java.io.IOException:CreateProcess错误=5,访问被拒绝
在java.lang.ProcessImpl.create(本机方法)
位于java.lang.ProcessImpl。(未知源)
位于java.lang.ProcessImpl.start(未知源)
... 28多

您应该在括号中设置路径,如

(“your\u path\Rscript.exe your\u path\filename.R”)

如果设置了环境,则可以使用
Rscript

例如:

Runtime.getRuntime().exec("C:\\Program Files\\R\\R-3.6.1\\bin\\x64\\Rscript.exe C:\\Users\\Thiru\\Desktop\\helloWorld.R");

如果您的windows未配置为使用
Rscript
运行以
.R
结尾的文件,则可能需要执行
Runtime.getRuntime().exec(“C:\path\to\Rscript.exe C:\Users\Thiru\Desktop\helloworld.R”)
。(我对java不够熟悉,不知道它是否应该是一个包含cmd和所有参数的字符串,或者是否需要传递一个以cmd作为第一个元素、以R脚本作为第二个元素的列表。)亲爱的@r2evans,它不起作用,我得到了file not found异常,但当我在cmd中这样运行时,我得到了cmd中的输出。E:\E Drive\Softwares\R docs\R-3.5.1\bin\x64>Rscript C:\Users\Thiru\Desktop\helloWorld.R如果您尝试
Runtime.getRuntime().exec(“E:\E Drive\Softwares\R docs\R-3.5.1\bin\x64>Rscript C:\Users\Thiru\Desktop\helloWorld.R”)
?@r2evans,当我这样运行时会出现文件未找到异常。我猜(又不是java人)它必须在一个字符串中包含可执行文件及其参数。你知道如何使用
运行时.getRuntime().exec
?我没有。