Java 无法检索命令行选项

Java 无法检索命令行选项,java,command-line,Java,Command Line,我一直在想这个问题。没有错误,但我没有看到期望的答案: public class Clopts { private static Options options = null; private static final String InputDir = "i"; private static final String OutputDir = "o"; private String input; private CommandLine cmd = nu

我一直在想这个问题。没有错误,但我没有看到期望的答案:

public class Clopts {
    private static Options options = null; 

    private static final String InputDir = "i";
    private static final String OutputDir = "o";
    private String input;
    private CommandLine cmd = null; 

    static{
            options = new Options();
            options.addOption(InputDir, false, "Input Directory");
            options.addOption(OutputDir, false, "Output Directory. " + OutputDir );
        }

    public static void main(String[] args) {
        Clopts cliProg = new Clopts();
        cliProg.loadArgs(args);
    }

    private void loadArgs(String[] args){
        CommandLineParser parser = new PosixParser();
        try {
            cmd = parser.parse(options, args);
        } catch (ParseException e) {
            System.err.println("Error parsing arguments");
            e.printStackTrace();
            System.exit(1);
        }

        if (cmd.hasOption(InputDir)){
            input = cmd.getOptionValue(InputDir);
            System.out.println(input); // This is always null :(
        }
    }
}
当我传递参数时
-I foo-o bar
但我并不是每次看到的foo或bar都是空的


我还想在主模块中打印LN。如何从命令行获取选项,然后打印出选项。

当您使用以下命令定义选项时:

options.addOption(InputDir, false, "Input Directory");
options.addOption(OutputDir, false, "Output Directory. " + OutputDir );

false
表示它们不接受参数。如果需要选项值,则必须在此处指定
true

在定义选项时使用:

options.addOption(InputDir, false, "Input Directory");
options.addOption(OutputDir, false, "Output Directory. " + OutputDir );


false
表示它们不接受参数。如果需要选项值,必须在此处指定
true

我正在使用现有库。。我正在使用apache commons cli库?当您
System.out.println(args)时会发生什么?根据Java命名约定,您应该编写
私有静态最终字符串输入\u DIR=“i”
@DanielKaplan,它将打印类似于
[Ljava.lang.String;@13e8d89
的内容。我本想打印它的内容,但是的,我应该更清楚。我使用的是现有库..我使用的是apache commons cli库?当您
System.out.println(args)时会发生什么
?根据Java命名约定,您应该编写
私有静态最终字符串输入_DIR=“i”
@DanielKaplan,以打印类似
[Ljava.lang.String;@13e8d89
我本想打印它的内容,但是的,我本应该更清楚。太棒了。我以为那些标志是用于可选或必填字段的。我如何在主模块中打印这些选项。不确定这是什么意思,请打印用法/帮助信息?是的。但是..现在println在“loadArgs”中方法,但如何在“main”中打印这些参数方法?您可以将值分配给一个成员变量,然后从
main
Awesome]打印它。我认为这些标志用于可选或必填字段。如何在主模块中打印这些选项。不确定这是什么意思,请打印用法/帮助信息?是的。但是..现在,println在“loadArgs”中方法,但如何在“main”方法中打印这些参数?您可以将值分配给成员变量,然后从
main