gpt4 book ai didi

Unix 上的 Java 执行

转载 作者:行者123 更新时间:2023-11-30 01:39:52 26 4
gpt4 key购买 nike

我在 Unix(AIX 和 Linux)上运行了下面的 Java 代码,但它不起作用。如果我运行此代码,文件 q1.01 不会被压缩,并且我不会抛出任何异常(文件 q1.01 存在,我希望在命令运行后找到文件 q1.01.Z。)如果我输入“which compress”,命令提示符会报告“/usr/bin/compress”。如果我在 Unix 提示符下输入命令“/usr/bin/compress q1.01”,它就可以正常工作。关于可能出现问题的任何想法吗?

String cmd = "/usr/bin/compress q1.01";
Runtime.getRuntime().exec(cmd);

最佳答案

[后来编辑:问题出在最初的描述中; OP 传递的是通配符而不是 q.01。所以我下面的答案是错误的,除了粗体部分。我将其保留,以便后面的评论有意义。]

它尝试将 /usr/bin/compress 作为不带参数的程序名称运行。

Runtime.exec() 方法有多种形式。您正在使用.exec(String)版本,只接受可执行文件。相反,您需要使用 .exec(String[])数组版本,它采用 String[0] 中的可执行文件和 String[1..] 中的参数。

.exec() 需要一个字符串数组来传递参数。

尝试

String[] cmd = new String[] { "/usr/bin/compress", "q1.01" };
Runtime.getRuntime().exec(cmd);

请注意,.exec 不会调用本地命令 shell。这意味着我们必须在调用 .exec() 之前进行通配符扩展,甚至进行一些参数解析。这就是为什么您不能只将完整的命令行传递给它。

关于Unix 上的 Java 执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1049081/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com