【问题标题】:Creating commands for a terminal app in Java用 Java 为终端应用程序创建命令
【发布时间】:2015-11-06 16:10:50
【问题描述】:

我是编程新手,我正在制作一个在命令行中运行的应用。我发现我可以使用 BufferedReader 从命令行读取输入。

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    String Input = "";

while (Input.equalsIgnoreCase("Stop") == false) {
        Input = in.readLine();  
        //Here comes the tricky part
    }

    in.close();

我现在要做的是找到一种方法来创建不同的“命令”,您只需在命令行中键入它们就可以使用它们。但这些命令可能必须多次使用。我是否必须使用某种带有巨大 switch 语句的命令设计模式(这对我来说似乎不正确)?我想避免使用额外的库

有经验的人可以帮我吗?

【问题讨论】:

  • 这将是一种简短的、“静态的”且难以维护的方式。要正确执行此操作,以便命令可以是“动态的”(带有可能的标志和诸如此类的可选参数),您必须阅读如何创建解析器。谷歌它...

标签: java shell command-line


【解决方案1】:

你可以试试这样的:

public static void main(String[] args) {
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    String input = "";
    try {
        while (!input.equalsIgnoreCase("stop")) {
            showMenu();
            input = in.readLine();
            if(input.equals("1")) {
                //do something
            }
            else if(input.equals("2")) {
                //do something else
            }
            else if(input.equals("3")) {
                // do something else
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

public static void showMenu() {
    System.out.println("Enter 1, 2, 3, or \"stop\" to exit");
}

最好将variables 保持小写。

我还要说!Input.equalsIgnoreCase("stop")Input.equalsIgnoreCase("stop") == false 更具可读性,尽管两者在逻辑上是等价的。

【讨论】:

    【解决方案2】:

    如果只是读取程序参数,您可以将它们添加到 Java 应用程序调用之后,并通过您的 main 方法的 args 参数访问它们。然后你可以遍历数组并搜索你的程序接受的标志。

    【讨论】:

    • 不,我必须能够在程序运行时使用它们,所以我认为我不能使用参数,可以吗?
    • 没有。因此,缓冲阅读器是您的选择。除非您想使用外部解析器库。 (取决于您的软件的大小和专业的可维护性)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-11
    • 2018-08-21
    • 2010-09-29
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 2010-10-25
    相关资源
    最近更新 更多