我想执行这个命令:
/ceplinux_work3/myName/opt/myCompany/ourProduct/bin/EXECUTE_THIS -p cepamd64linux.myCompany.com:19021/ws1/project_name < /ceplinux_work3/myName/stressting/Publisher/uploadable/00000.bin >> /ceplinux_work3/myName/stressting/Publisher/stats/ws1.project_name.19021/2011-07-22T12-45-20_PID-2237/out.up
但它不起作用,因为 EXECUTE_THIS 需要通过重定向输入文件,并且简单地将此命令传递给 Runtime.exec 不起作用。
旁注:在来这里询问之前,我全面搜索了如何解决这个问题。网上有很多关于 Runtime.exec 和输入/输出重定向的问题/文章。但是,我找不到任何处理将文件传递给命令并将结果输出到另一个文件的方法。另外,我完全不熟悉输入/输出流,所以我很难根据我的具体情况将所有信息放在一起。
也就是说,非常感谢任何帮助。
附:如果有多种方法可以做到这一点,我更喜欢吞吐量最快的方法。
编辑:正如我在上一个问题中所讨论的,我不能将其更改为 bash 调用,因为程序必须等待此过程完成才能继续。
除非您要发送文件name对于进程的标准输入,数据是来自文件还是来自任何其他数据源没有区别。
您需要写信给OutputStream
给出的Process.getOutputStream()
。您写入的数据您可以读取in从文件中使用FileInputStream
.
把它们放在一起可能看起来像这样:
Process proc = Runtime.getRuntime().exec("...");
OutputStream standardInputOfChildProcess = proc.getOutputStream();
InputStream dataFromFile = new FileInputStream("theFileWithTheData.dat");
byte[] buff = new byte[1024];
for ( int count = -1; (count = dataFromFile.read(buff)) != -1; ) {
standardInputOfChildProcess.write(buff, 0, count);
}
我省略了很多细节,这只是为了了解要点。您需要安全地关闭某些东西,可能需要考虑缓冲,并且您需要担心的陷阱Runtime.exec().
Edit
将输出写入文件的情况类似。获得一个FileOutputStream
指向输出文件并写入您读取的数据Process.getInputStream()
对此OutputStream
。这里主要的警告是你must在第二个线程中执行此操作,因为从同一线程访问两个阻塞流将导致死锁(请参阅上面的文章)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)