如何连接两个命令行参数?

时间:2013-02-24 04:15:48

标签: java command-line arguments apache-commons args

我需要连接两个命令行参数。用户应该放置-input“filename.txt”和/或-output“filename.txt”,但我似乎无法将-input-output部分与文件名。

因此,例如,用户可以输入以下任何内容:

java classname
java classname -input filename.txt
java classname -output filename.txt
java classname -input filename.txt -output filename.txt
java classname -output filename.txt -input filename.txt

我试过了:

        for(int i = 0; i < args.length; i++){
        if(args[i].equals("-input")){
            input = args[i + 1];
        }
        else{
            //input from terminal
        }

        if(args[i].equals("-output")){
            output = args[i + 1];
        }
        else{
            //output to terminal
        }

但它不起作用,似乎不优雅。我一直在研究Apache Commons CLI,但我似乎无法弄清楚它是如何工作的,以及是否有适用的功能。使用Apache的东西或其他方式是否可以通过某种方式将-input连接到filename.txt?

2 个答案:

答案 0 :(得分:1)

这应该有效

public static void main(String[] args) {
    String input = findArg("input", args);
    String output = findArg("output", args);
}

static String findArg(String name, String[] args) {
    for (int i = 0; i < args.length; i += 2) {
        if (args[i].equals("-" + name)) {
            return args[i + 1];
        }
    }
    return null;
}

答案 1 :(得分:0)

你的逻辑存在缺陷;这就是为什么它不起作用。如果我使用以下参数java classname -input input.txt -output output.txt运行程序,那么您的代码将从终端输入并输出到output.txt。

更新 - 实际上它会因NullPointerException而崩溃