2015-09-03 64 views
2

我正在IntelliJ IDE中編寫一個Java應用程序。該應用程序使用Rserve軟件包連接到R並執行一些功能。當我想運行我的第一次代碼,我不得不在命令行推出R和啓動Rserve作爲一個守護進程,它看起來是這樣的:如何從Java自動啓動Rserve?

R 
library(Rserve) 
Rserve() 

這樣做後,我可以輕鬆地訪問R中的所有功能都沒有任何錯誤。但是,由於此Java代碼將被捆綁爲可執行文件,因此,只要代碼運行,就會自動調用Rserve(),以便我必須跳過使用命令行啓動Rserve的手動步驟?

回答

3

下面是Class代碼我寫的讓RserveJava

public class InvokeRserve { 
    public static void invoke() { 
     String s; 

     try { 

      // run the Unix ""R CMD RServe --vanilla"" command 
      // using the Runtime exec method: 
      Process p = Runtime.getRuntime().exec("R CMD RServe --vanilla"); 

      BufferedReader stdInput = new BufferedReader(new 
        InputStreamReader(p.getInputStream())); 

      BufferedReader stdError = new BufferedReader(new 
        InputStreamReader(p.getErrorStream())); 

      // read the output from the command 
      System.out.println("Here is the standard output of the command:\n"); 
      while ((s = stdInput.readLine()) != null) { 
       System.out.println(s); 
      } 

      // read any errors from the attempted command 
      System.out.println("Here is the standard error of the command (if any):\n"); 
      while ((s = stdError.readLine()) != null) { 
       System.out.println(s); 
      } 

      // System.exit(0); 

     } 
     catch (IOException e) { 
      System.out.println("exception happened - here's what I know: "); 
      e.printStackTrace(); 
      System.exit(-1); 
     } 
    } 
} 
3

我知道這個問題已經被問了很久。我想你有答案。但下面的答案可能會幫助其他人。這就是爲什麼我張貼我的答案。 回答: - 而不是一次又一次地去R控制檯啓動Rserve。你可以做的一件事是你可以編寫一個Java程序來啓動Rserve。

您可以在java程序中使用以下代碼來啓動Rserve。 https://www.sitepoint.com/community/t/call-linux-command-from-java-application/3751。這是你將得到從java.I運行一個linux命令的代碼的鏈接,只改變了命令並在下面發佈。

package javaapplication13; 

import java.io.*; 

public class linux_java { 
public static void main(String[] args) { 
try { 
String command ="R CMD Rserve"; 
BufferedWriter out = new BufferedWriter(new FileWriter(
new File(
    "/home/jayshree/Desktop/testqavhourly.tab"), true)); 
final Process process = Runtime.getRuntime().exec(command); 
BufferedReader buf = new BufferedReader(new InputStreamReader(
process.getInputStream())); 
String line; 
while ((line = buf.readLine()) != null) { 
out.write(line); 
    out.newLine(); 
    } 
    buf.close(); 
     out.close(); 
     int returnCode = process.waitFor(); 
     System.out.println("Return code = " + returnCode); 
     } catch (Exception e) { 
     e.printStackTrace(); 
     } 
       } 
      } 
+1

工作,我嘗試這個代碼,而這最初並沒有爲我工作。然後我發現我已經使用Rstudio Rserve安裝,因此「R CMD Rserve」在控制檯上失敗。然後我從Rserve網站下載了二進制文件,並使用命令行安裝它。希望這會有幫助,如果有人遇到同樣的問題。 – novicegeek