从脚本捕获stdout并存储在java字符串中

时间:2013-12-10 17:17:19

标签: java io

有很多关于捕获stdout并将其存储到字符串中的问题,但是大多数stdout都是由用户生成或由直接java函数输出的。在我的例子中,从我的java程序,我正在启动一个脚本,打印一系列文件路径到stdout。它是一个使用find命令返回文件路径的脚本。我想捕获这些文件路径并将它们存储在我的Java代码中的一个字符串中,以后我可以在java程序的另一个函数中使用它。

我的代码:

launchOnCommandLine("./getFilepaths.sh");

这将向控制台窗口吐出一系列文件路径,我想捕获它们并将其存储到字符串中。

有很多关于ByteArrayOutputStream的例子,但我不太明白如何在我的上下文中使用它。

2 个答案:

答案 0 :(得分:0)

您是否尝试过http://docs.oracle.com/javase/7/docs/api/java/lang/Process.html#getInputStream()

我认为你可以这样做:

Process p = Runtime.exec("process.sh");
Scanner scanner = new Scanner(p.getInputStream());
p.waitFor();
while (scanner.hasNext()) {
    String line = scanner.next();
    /* Do whatever you need we the current line */
}

答案 1 :(得分:-1)

Process.getInputStream()可以处理它,但是如果你不小心从你的流中读取它会有一些警告会导致死锁:Some reading here

如果您使用的是Java 1.7,建议的更安全的替代方法是改为使用ProcessBuilder类:Some more reading