【问题标题】:Java - execute a program with options, like ls -lJava - 执行带有选项的程序,例如 ls -l
【发布时间】:2012-08-07 06:31:40
【问题描述】:
  1. 在 Java 中,如何执行带有选项的 linux 程序,如下所示:

    ls -a(选项是-a),

    另一个:./myscript name=john age=24

    我知道如何执行命令,但无法执行该选项。

【问题讨论】:

标签: java terminal command


【解决方案1】:

你需要执行一个外部进程,看看ProcessBuilder,因为它几乎回答了你的问题,Using ProcessBuilder to Make System Calls

更新示例

我直接从列表示例中提取并对其进行了修改,以便我可以在我的 PC 上进行测试,它运行良好

private static void copy(InputStream in, OutputStream out) throws IOException {
    while (true) {
        int c = in.read();
        if (c == -1) {
            break;
        }
        out.write((char) c);
    }
}

public static void main(String[] args) throws IOException, InterruptedException {

//        if (args.length == 0) {
//            System.out.println("You must supply at least one argument.");
//            return;
//        }

    args = new String[] {"cmd", "/c", "dir", "C:\\"};

    ProcessBuilder processBuilder = new ProcessBuilder(args);
    processBuilder.redirectErrorStream(true);

    Process process = processBuilder.start();
    copy(process.getInputStream(), System.out);
    process.waitFor();
    System.out.println("Exit Status : " + process.exitValue());
}

【讨论】:

  • 我知道是否有 ProcessBuilder,但有点挣扎。有什么具体的例子吗?您将如何在 ProcessBuilder 的构造函数中设置字符串数组? ProcessBuilder pb = new ProcessBuilder(.......)如何在dot dot dot里面设置command和args?
  • 我会阅读该示例,它确实可以满足您的需求。 ProcessBuilder 接受 List<String>String 参数数组,第一个是要执行的命令,其余的在命令参数中(每个参数都应该是一个单独的参数)
  • 您可能还想阅读 stackoverflow.com/questions/1410741/… 以执行 shell 命令
【解决方案2】:

Apache Commons 有一个库来处理这类事情。我希望在我手动编写这样的代码之前知道它。后来我找到了。它为命令行程序提供各种格式的选项。

Apache Commons CLI

【讨论】:

    猜你喜欢
    • 2014-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多