Search code examples
javarintellij-idearserve

How to start Rserve automatically from Java?


I am writing a Java application in IntelliJ IDE. The application used Rserve package to connect to R and perform some functions. When I want to run my code for the first time, I have to launch R in the command line and start the Rserve as a daemon, which looks something like this:

R
library(Rserve)
Rserve()

After doing this, I can easily access all the function in R without any errors. However, since this Java code would be bundled as an executable file, so is there a way that Rserve() is invoked automatically as soon as the code is run so that I have to skip this manual step of starting Rserve using the command line?


Solution

  • Here is the code for the Class I wrote to get Rserve working from Java

    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);
            }
        }
    }