我正试图在java程序中运行"cut“,但我迷失在如何拆分命令数组的问题上。我在命令行中的程序如下:
cut file.txt -d' ' -f1-2 > hits.txt我正在尝试在java中运行它,如下所示
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命令的字符串数组。你有什么建议吗?以及有关该问题的任何已知文档。谢谢
发布于 2012-03-22 06:43:22
为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系统上工作。
发布于 2012-03-22 06:38:53
如果你想要输出重定向,你必须自己去做。> hits.txt不会执行您想要的操作。in another StackOverflow question介绍了如何从exec调用的进程重定向标准输出。
它肯定试图将cut file.txt理解为名称中包含空格的单个可执行文件的完整相对路径,这几乎肯定不是您想要的。用正确的代码来解决这个问题会更容易。
https://stackoverflow.com/questions/9813821
复制相似问题