Статьи

Интерфейсы командной строки Java (часть 28): getopt4j

Страница для getopt4j описывает это как «библиотеку для анализа аргументов командной строки в соответствии со стилем GNU». Затем на странице вводится getopt4j : «Библиотека getopt4j предназначена для синтаксического анализа параметров командной строки таким же образом, как и функция C getopt () в glibc (библиотека времени выполнения GNU C). Он пытается сделать это более простым, более ориентированным на Java образом, чем оригинальный продукт ». В этом посте описывается использование getopt4j для разбора параметров командной строки таким же образом, как это было сделано для библиотек, описанных в предыдущих 27 публикациях этой серии .

Этап «определения» выполняется в getopt4j с помощью экземпляров CLOptionDescriptor как показано в следующем листинге кода (полный исходный код доступен на GitHub ).

Этап «Определение» с getopt4j

01
02
03
04
05
06
07
08
09
10
11
12
final CLOptionDescriptor fileDescriptor
   = new CLOptionDescriptor("file",
      CLOptionDescriptor.ARGUMENT_REQUIRED,
      'f',
      "Path and name of file.");
final CLOptionDescriptor verboseDescriptor
   = new CLOptionDescriptor("verbose",
      CLOptionDescriptor.ARGUMENT_DISALLOWED,
      'v',
      "Is verbosity enabled?");
final CLOptionDescriptor[] optionsDefinitions
   = new CLOptionDescriptor[]{fileDescriptor, verboseDescriptor};

Как показано в приведенном выше коде, экземпляры CLOptionDescriptor помещаются в массив для представления в анализатор getopt4j.

Этап «синтаксического анализа» достигается в getopt4j путем создания экземпляра класса CLArgsParser . Конструктор этого класса принимает аргументы командной строки в массиве String[] и массив экземпляров CLOptionDescriptor представляющих определения параметров. Это показано в следующем листинге кода.

Этап «Разбор» с помощью getopt4j

1
final CLArgsParser parser = new CLArgsParser(arguments, optionsDefinitions);

Этап «опрос» в getopt4j выполняется путем извлечения List<CLOption> посредством вызова метода getArguments() в экземпляре CLArgsParser . Каждый экземпляр CLOption может быть запрошен его getId() для получения проанализированного параметра по его «короткому» имени (в данном примере «f» или «v»). Как только соответствующий экземпляр CLOption будет найден с помощью его getId() , тот же самый экземпляр CLOption предоставит значение, связанное с командной строкой, с этим параметром посредством вызова метода getArgument() метода getArgument() . Этот процесс «допроса» демонстрируется в следующем листинге кода.

Этап «Допрос» с getopt4j

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
String filePathAndName = null;
boolean verbose = false;
final List<CLOption> options = parser.getArguments();
for (final CLOption option : options)
{
   switch(option.getId())
   {
      case 'f' :
         filePathAndName = option.getArgument();
         break;
      case 'v' :
         verbose = true;
         break;
   }
}
 
out.println("File path/name is '" + filePathAndName + "' and verbosity is " + verbose);

Библиотека getopt4j позволяет легко запрашивать информацию об использовании / помощи, передавая массив экземпляров CLOptionDescriptor статическому методу CLUtil.describeOptions(CLOptionDescriptor[]) . Это продемонстрировано в следующем листинге кода: пара строк кода вызывается, когда обнаруживается, что путь / имя файла не указан.

Заявление об использовании с getopt4j

1
2
3
4
5
if (filePathAndName == null)
{
   out.println("ERROR: The file path/name option is required but was not provided.\n\n"
      + CLUtil.describeOptions(optionsDefinitions));
}

Первый из следующих двух снимков экрана отображает автоматически сгенерированное выражение «использование», которое код может вызывать, когда не указана требуемая «опция файла». На втором изображении показаны различные комбинации длинных и коротких названий опций «file» и «verbose».

Существуют характеристики getopt4j, которые следует учитывать при выборе платформы или библиотеки, чтобы помочь с анализом командной строки в Java.

Библиотека getopt4j предоставляет GNU C getopt () -подобную функциональность и API со стилем Java.

Дополнительные ссылки

Опубликовано на Java Code Geeks с разрешения Дастина Маркса, партнера нашей программы JCG . Смотрите оригинальную статью здесь: Интерфейсы командной строки Java (часть 28): getopt4j

Мнения, высказанные участниками Java Code Geeks, являются их собственными.