【问题标题】:How to make my program accept command-line options in Java?如何让我的程序接受 Java 中的命令行选项?
【发布时间】:2021-01-14 15:36:16
【问题描述】:

我正在开发一个程序public class Talk,它以两种方式通信连接客户端和服务器。我将使用终端窗口运行程序。如何添加命令行选项以使它们工作Talk –h [hostname | IPaddress] [–p portnumber],或Talk –s [–p portnumber],或Talk –a [hostname|IPaddress] [–p portnumber],或Talk –help

这是我目前所拥有的:

if (args[0] == "-h" && args[2] == "-p" && (Integer.parseInt(args[3]) % 1 == 0)) {

            // code for Talk –h [hostname | IPaddress] [–p portnumber]

        } else if (args[0] == "-s" && args[1] == "-p" && (Integer.parseInt(args[2]) % 1 == 0)) {

            // code for Talk –s [–p portnumber]

        } else if (args[0] == "-a" && args[2] == "-p" && (Integer.parseInt(args[3]) % 1 == 0)) {

            // code for Talk –a [hostname|IPaddress] [–p portnumber]

        } else if (args[0] == "-help") {

            // code for Talk –help

        } else {

            System.out.println("Invalid invocation, use -help for instructions on how to use program");
            System.exit(-1);

        }

这是添加命令行选项的正确方法吗?以及它们的限制条件?

【问题讨论】:

  • 看起来不错。 Integer.parseInt(args[3]) % 1 == 0 周围不需要括号。
  • parseInt 返回的 That's not how to compare Strings in Javaall 值满足 %1==0 但它们中的大多数不是有效的端口号(至少对于 TCP 和 UDP,您没有不说)。此外,使用消息中的[] 通常表示 optional 即可以省略但您不允许这样做。此外,否定的进程退出代码通常不起作用。

标签: java command-line terminal command-line-arguments


【解决方案1】:

除非它是一个教育练习,否则您可能会使用其中一个用于解析命令行的完善库做得更好。 common-cli (https://commons.apache.org/proper/commons-cli/) 就是其中之一,尽管还有其他的。

问题在于稳健地解析命令行选项是困难。有各种各样的复杂性需要处理,而且单独的错误检查可能相当繁重。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-13
    • 2023-03-31
    • 2016-04-24
    • 2012-04-21
    • 1970-01-01
    • 2013-09-26
    • 2012-11-08
    相关资源
    最近更新 更多