尝试使用Runtime.getRuntime()。exec()执行Java jar

时间:2013-04-30 14:26:53

标签: java process runtime.exec

在我正在进行的项目中,我需要在类路径中执行资源文件夹中的脚本。我只是测试最终的脚本功能,因为我在Windows上,我需要一种方法将文件输出到STDIN,所以我创建了一个简单的cat.jar程序来克隆unixs cat命令。

所以,当我执行“java -jar cat.jar someFile.txt”时,它会将文件输出到stdout。我确信有不同的方式来做我做的事。

反正, 我想从我的主java程序中运行该JAR。 我在做

Runtime.getRuntime().exec("java -jar C:/cat.jar C:/test.txt");

我尝试将正斜杠切换为反斜杠并转义它 - 不起作用。 什么都没有被发送到标准。

如果我自己运行cat jar,我会将文件定向到标准输出。

我在这里做错了什么? 这有足够的信息吗?

1 个答案:

答案 0 :(得分:2)

使用Process

返回的exec()实例
Process cat = Runtime.getRuntime().exec("java -jar C:/cat.jar C:/test.txt");
BufferedInputStream catOutput= new BufferedInputStream(cat.getInputStream());
int read = 0;
byte[] output = new byte[1024];
while ((read = catOutput.read(output)) != -1) {
    System.out.println(output[read]);
}


参考文献:
http://docs.oracle.com/javase/7/docs/api/java/lang/Process.html

  

默认情况下,创建的子进程没有自己的终端或控制台。它的所有标准I / O(stdin,stdout,stderr)操作都将被重定向到父进程,在那里可以通过使用getOutputStream(),getInputStream()和getErrorStream()方法获得的流来访问它们。

http://docs.oracle.com/javase/7/docs/api/java/lang/Process.html#getInputStream()

  

getInputStream()返回连接到子进程正常输出的输入流。