收录日期:2020/05/29 15:50:58 时间:2016/07/24 21:00:22 标签:Java SE
大家好:小弟最近做项目有个问题希望请教各位大哥,分数不多了,请海涵。
我希望在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、标准输入和标准输出都是需要关闭的,你这里都没有关闭,不知道运行程序的时候是否阻塞了,还是程序能够结束?
2、你的命令里面有很多的双引号,Process对双引号的处理也是需要注意的。

我之前也遇到过类似的问题,当时总结了一些东西,现在有些忘了,你可以参考一下这个:
http://blog.csdn.net/ragic/archive/2010/05/12/5583164.aspx
如果正常执行了肯定会有信息的。

Java中存在转义字符,你需要确认你拼的command是否在jvm中是正确的。

最好从command是否执行了去确认。
用Rserve多好了…http://www.rforge.net/Rserve

如何合并文件 二进制数字符串,急征答案 关于圆形的Button 有谁作过3DS的转换程序,怎样才能突破256个实体的限制? 有关\"重载运算符\"问题! 重载\"+\"运算符时,我不明白为什么不能\"引用返回\"?!!!!! 请指教,那位大虾知道二进制兼容和工程兼容的差别是什么? 如 何 快 速 計 算1024*375/221 的 值 构造涵数可以重载?? 那位大虾能够给我一个运用mscomm控件完成简单com1口读写的例子!谢谢!! *.WXD文章用什么工具看? 求救:一个关于调用函数的传参问题 紧急求解;ListView中不同行有不同颜色如何实现?(不用消息处理,只用SetBKColor或其他方法,300分!!!!! ?紧急求解;VB中ListView中不同行有不同颜色如何实现?(不用消息处理,只用SetBKColor或其他方法,300分!!!! 那里有vc的源程序下?(内空)谢谢! 有关数据库获得错误代码的问题 请教Password加密算法? MSDN中有VC的Samples吗?请指引!(无内容) 有关opengl的人脸造型! 关于装控件的问题。。。 怪事,怪事... 用WINAPI怎样读写一个文件(用二进制形式) 有没有一本详细介绍C++的书?《C++builder4.0 技术内幕》是哪家出版社出的? 如何通过asp上传word文档到sql server,倾囊给分!!!! 分布式协作开发 怎么样实现仿真按键ALT+TAB(ALT按下不放) 分布式软件协作开发 有没有办法看flash文件(.swf)的源代码? 我的光驱怎么了!!!! 再次问一下CreateThread问题