2011-01-14 3 views
20

Я использую CLI Apache Commons для обработки аргументов командной строки в Java.Как получить параметры при использовании библиотеки CLI Apache Commons

Я объявил параметры a и b, и я могу получить доступ к значению с помощью CommandLine.getOptionValue().

Usage: myapp [OPTION] [DIRECTORY] 

Options: 
-a  Option A 
-b  Option B 

Как объявить и получить доступ к переменной DIRECTORY?

+0

Как вы сделать '' HelpFormatter' печать [OPTION] [Каталог] '? –

ответ

29

Используйте следующий метод:

CommandLine.getArgList() 

, который возвращает то, что осталось после того, как параметры были обработаны.

+0

Что делать, если количество аргументов для всех параметров не ограничено? – Zangdak

6

Возможно, лучше использовать другой вариант (-d), чтобы идентифицировать каталог, который более интуитивно понятен пользователю.

Или следующий код демонстрирует получение оставшегося списка аргументов

public static void main(final String[] args) { 
    final CommandLineParser parser = new BasicParser(); 
    final Options options = new Options(); 
    options.addOption("a", "opta", true, "Option A"); 
    options.addOption("b", "optb", true, "Option B"); 

    final CommandLine commandLine = parser.parse(options, args); 

    final String optionA = getOption('a', commandLine); 
    final String optionB = getOption('b', commandLine); 

    final String[] remainingArguments = commandLine.getArgs(); 

    System.out.println(String.format("OptionA: %s, OptionB: %s", optionA, optionB)); 
    System.out.println("Remaining arguments: " + Arrays.toString(remainingArguments)); 
} 

public static String getOption(final char option, final CommandLine commandLine) { 

    if (commandLine.hasOption(option)) { 
     return commandLine.getOptionValue(option); 
    } 

    return StringUtils.EMPTY; 
} 
+1

Для этого я бы добавил, что HelpFormatter будет использоваться для печати аргумента [DIRECTORY]: 'HelpFormatter formatter = new HelpFormatter();' 'formatter.printHelp (" myapp [OPTION] [DIRECTORY] ", опционы); ' – Blazes