关于Java命令行参数

时间:2010-03-11 00:33:59

标签: java string

我为程序设置了以下命令行参数。参数proc是必需参数chgval是可选的,参数inputfile是可选的。

./ test.sh -proc mode1 -chval a -inputfile b.csv

我需要修改下面的函数,这样任何一个可选参数都应该存在于命令行参数和强制参数proc中。如果我有两个可选参数chval,命令行中的inputfile以及它现在允许的强制参数proc。我不希望它发生它应该抛出错误。

列出下面的有效值,其余的应该是错误

./ test.sh -proc mode1 -chval a

./ test.sh -proc mode1 -inputfile b.csv

./ test.sh -proc mode1


 public static Options usage() {

      Option proc = OptionBuilder.withArgName("proc")
                                      .hasArg()
                                      .isRequired()
                                      .withDescription("Process Mode for testing:")

                                      .create("proc");
      Option chgval = OptionBuilder.withArgName("chgval")
                                      .hasArg()
                                      .withDescription("chg eeds to be Processed")
                                      .create("chgval");
      Option inputFile = OptionBuilder.withArgName("inputfile")
                                      .hasArg()
                                      .withDescription("Name of the input file")
                                      .create("inputfile");

      Options options = new Options();
      options.addOption(proc);
      options.addOption(chgval);
      options.addOption(inputFile);

      return options;
  }

需要修改什么?

2 个答案:

答案 0 :(得分:2)

如果您的意思是inputfilechgval应该是互斥的,那么您应该使用OptionGroup

答案 1 :(得分:2)

Dancrumb是正确的,因为您使用OptionGroup的互斥选项。以下是如何将它用于您的情况:

Options options = new Options();

OptionGroup group1 = new OptionGroup();
group1.addOption(chgval);
group1.addOption(inputFile);

options.addOption(proc);
options.addOptionGroup(group1);

现在,chgvalinputFile是互斥选项。对于"-proc mode1 -chgval a -inputfile b.csv"之类的参数,它会抛出AlreadySelectedException:“指定了inputfile选项,但已选择此组中的选项:chgval”。

顺便说一句,我也注意到您在chvalchgval之间的帖子不一致。