首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java中执行外部程序

在Java中执行外部程序
EN

Stack Overflow用户
提问于 2012-03-22 06:31:04
回答 2查看 1.1K关注 0票数 1

我正试图在java程序中运行"cut“,但我迷失在如何拆分命令数组的问题上。我在命令行中的程序如下:

代码语言:javascript
复制
cut file.txt -d' ' -f1-2  > hits.txt

我正在尝试在java中运行它,如下所示

代码语言:javascript
复制
Runtime rt = Runtime.getRuntime();
Process pr = rt.exec(new String[]{"file.txt"," -d' ' -f1-2 "," > hits.txt"});
pr.waitFor();

但是我得到了以下运行时错误

代码语言:javascript
复制
Exception in thread "main" java.io.IOException: Cannot run program "cut file.txt": java.io.IOException: error=2, No such file or directory

我将此错误归因于用作exec命令的字符串数组。你有什么建议吗?以及有关该问题的任何已知文档。谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-22 06:43:22

为bash创建一个脚本:

代码语言:javascript
复制
"/bin/bash" "-c" "cut file.txt -d' ' -f1-2  > hits.txt"

或拆分

代码语言:javascript
复制
"cut" "file.txt" "-d" "' '" "-f" "1-2" 

错误消息清楚地表明:

代码语言:javascript
复制
Cannot run program "cut file.txt"

因此,它将"cut file.txt“解释为内部有空格的单个程序名。

您的问题从重定向开始,因为您不能以这种方式重定向输出:

代码语言:javascript
复制
"cut" "file.txt" "-d" "' '" "-f" "1-2" ">" "hits.txt"

你必须处理输入流和输出流。用Java语言实现cut可能是一个更好的主意,以获得可移植的解决方案,或者调用用户可以在命令行或配置文件中指定的脚本,这样它就可以适用于Windows或其他平台。

调用/bin/bash并重定向应该可以在类unix系统上工作。

票数 1
EN

Stack Overflow用户

发布于 2012-03-22 06:38:53

如果你想要输出重定向,你必须自己去做。> hits.txt不会执行您想要的操作。in another StackOverflow question介绍了如何从exec调用的进程重定向标准输出。

它肯定试图将cut file.txt理解为名称中包含空格的单个可执行文件的完整相对路径,这几乎肯定不是您想要的。用正确的代码来解决这个问题会更容易。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9813821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档