Страница для 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 является открытым исходным кодом и выпущен под лицензией Apache, версия 2.0 .
- JAR-файл getopt4j-1.2.jar имеет размер приблизительно 16 КБ.
- Классы в getopt4j-1.2.jar (июнь 2016 г.), доступные в репозитории MVN (и центральном репозитории Maven ), скомпилированы для Java SE 6 (« основная версия: 50 »).
- Лучшие примеры использования getopt4j представлены в каталоге примеров в дистрибутиве.
Библиотека getopt4j предоставляет GNU C getopt () -подобную функциональность и API со стилем Java.
Дополнительные ссылки
- getopt4j (GitHub)
- getopt4j 1.2 (репозиторий Maven / MVN)
- Примеры getopt4j
- Примеры GNU C getopt ()
Опубликовано на Java Code Geeks с разрешения Дастина Маркса, партнера нашей программы JCG . Смотрите оригинальную статью здесь: Интерфейсы командной строки Java (часть 28): getopt4j
Мнения, высказанные участниками Java Code Geeks, являются их собственными. |