大家好:小弟最近做项目有个问题希望请教各位大哥,分数不多了,请海涵。
我希望在java语言中调用R语言中的Rscript命令,比如:"Rscript -e " + "\"v1 <- c(" + v1 + ");v2 <- c(" + v2 + ");v2/2;\"";
代码如下:
import java.io.*;public class RTest1 { public static void main(String[] args) {
try {
String v1 = "3,4,5";
String v2 = "3,4,5";
String command = "Rscript -e " + "\"v1 <- c(" + v1 + ");v2 <- c(" + v2 + ");t.test(v1,v2,alternative=\"greater\")$p.value\"";
//String command = "Rscript -e " + "\"v1 <- c(" + v1 + ");v2 <- c(" + v2 + ");v2/2;\"";
Process process = Runtime.getRuntime().exec(command);
process.waitFor();
BufferedInputStream br = new BufferedInputStream(process.getInputStream());
            BufferedInputStream br2 = new BufferedInputStream(process.getErrorStream()); 
            
/*BufferedReader bReader = new BufferedReader(new InputStreamReader(process.getErrorStream()));
String stringLine = null;
while ((stringLine = bReader.readLine()) != null) {
System.out.println(stringLine);
}*/
            
            int ch;
            System.out.println("Input Stream:");
            while((ch = br.read())!= -1){
                System.out.print((char)ch);
            }
            System.out.println("Error Stream:");
            while((ch = br2.read())!= -1){
                System.out.print((char)ch);
            }  } catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}}结果是什么输出都没有,但是在linux下面单独敲出该命令,命令运行正常,希望各位大哥指点迷津,小弟拜谢

解决方案 »

  1.   

    可能有几个方面的问题:
    1、标准输入和标准输出都是需要关闭的,你这里都没有关闭,不知道运行程序的时候是否阻塞了,还是程序能够结束?
    2、你的命令里面有很多的双引号,Process对双引号的处理也是需要注意的。我之前也遇到过类似的问题,当时总结了一些东西,现在有些忘了,你可以参考一下这个:
    http://blog.csdn.net/ragic/archive/2010/05/12/5583164.aspx
      

  2.   

    如果正常执行了肯定会有信息的。Java中存在转义字符,你需要确认你拼的command是否在jvm中是正确的。最好从command是否执行了去确认。
      

  3.   

    用Rserve多好了…http://www.rforge.net/Rserve