2013-04-30 111 views
1

在我正在处理的项目中,我需要执行一个脚本,该脚本位于资源文件夹中 - 类路径中。我只是测试最终的脚本功能,因为我在Windows上,我需要一种方法将文件输出到STDIN,所以我创建了一个简单的cat.jar程序来克隆unixs cat命令。尝试使用Runtime.getRuntime()执行Java jar exec()

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

反正, 我想从我的主要Java程序运行该JAR。 我做

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

我已经试过正斜杠转换为一个反斜杠和逃避它 - 没有工作。 什么都没有发送到标准输出。

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

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

+1

1)阅读[runtime.exec info。页面(http://stackoverflow.com/tags/runtime.exec/info)。在链接的Java World文章中实现***全部***建议。 2)然后忽略它指'exec'并使用'ProcessBuilder(String [])'构造函数。 3)接下来的第2步可能会给你足够的信息来解决问题,否则它会提供更多的信息让我们能够提供帮助。 – 2013-04-30 14:35:22

+0

我的回答有帮助吗? – 2013-04-30 19:30:16

+0

它确实,我读通过所有的信息,如果它是非常有用的:) – envinyater 2013-05-01 12:03:35

回答

1

通过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]); 
} 


参考使用返回的Process实例:
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()返回连接到所述子进程的正常输出的输入流。

+0

这很好,谢谢:) – envinyater 2013-05-01 12:03:19

+0

@Ravi Thapliyal超级答案和谢谢。我正在寻找这种类型的答案。再次感谢 – 2013-05-22 10:32:14

相关问题