我试图在java程序中运行“cut”,但是我在如何拆分命令数组方面迷失了。 我在命令行中的程序如下:
cut file.txt -d' ' -f1-2 > hits.txt
我正试图像这样在
中运行它Runtime rt = Runtime.getRuntime();
Process pr = rt.exec(new String[]{"file.txt"," -d' ' -f1-2 "," > hits.txt"});
pr.waitFor();
但我收到以下运行时错误
Exception in thread "main" java.io.IOException: Cannot run program "cut file.txt": java.io.IOException: error=2, No such file or directory
我将此错误归因于我用作exec命令的字符串数组。关于如何做到这一点的任何想法?还有关于该问题的任何已知文档。感谢
答案 0 :(得分:1)
如果您想要输出重定向,则必须自己完成。 > hits.txt
不会做你想做的事。从exec
调用的进程重定向stdout涵盖in another StackOverflow question。
您显示的错误与您在此处列出的源代码不一致 - cut
没有来源。它绝对试图将cut file.txt
理解为单个可执行文件的完整相对路径,其名称中包含空格,这几乎肯定不是您想要的。使用正确的代码对此进行故障排除会更容易。
答案 1 :(得分:1)
为bash创建一个脚本:
"/bin/bash" "-c" "cut file.txt -d' ' -f1-2 > hits.txt"
或拆分
"cut" "file.txt" "-d" "' '" "-f" "1-2"
错误消息清楚地表明:
Cannot run program "cut file.txt"
所以它将“cut file.txt”解释为一个内部空白的程序名。
您的问题始于重定向,因为您无法以这种方式重定向输出:
"cut" "file.txt" "-d" "' '" "-f" "1-2" ">" "hits.txt"
您必须处理输入和输出流。在Java中实现cut
,获取可移植解决方案,或者调用用户可以在命令行或配置文件中指定的脚本,这样可以更好地适应Windows或其他平台。
调用/ bin / bash并重定向应该可以在unix之类的系统上运行。