Учебники

Apache Commons CLI — Краткое руководство

Apache Commons CLI — Обзор

CLI Apache Commons — это компоненты Apache Commons, которые являются производными от Java API и предоставляют API для анализа аргументов / опций командной строки, передаваемых программам. Этот API также позволяет распечатать справку, связанную с доступными опциями.

Обработка командной строки состоит из трех этапов.

  • Этап определения
  • Этап разбора
  • Этап допроса

Этап определения

На этапе определения мы определяем параметры, которые приложение может принять и действовать соответственно. CLI Commons предоставляет класс Options, который является контейнером для объектов Option.

// create Options object
Options options = new Options();

// add a option
options.addOption("a", false, "add two numbers");

Здесь мы добавили флаг опции a, в то время как false в качестве второго параметра означает, что опция не является обязательной, а третий параметр содержит описание опции.

Этап разбора

На этапе синтаксического анализа мы анализируем параметры, переданные с использованием аргументов командной строки после создания экземпляра анализатора.

//Create a parser
CommandLineParser parser = new DefaultParser();

//parse the options passed as command line arguments
CommandLine cmd = parser.parse( options, args);

Этап допроса

На этапе опроса мы проверяем, присутствует ли конкретная опция или нет, и соответствующим образом обрабатываем команду.

//hasOptions checks if option is present or not
if(cmd.hasOption("a")) {
   // add the two numbers
} else if(cmd.hasOption("m")) {
   // multiply the two numbers
}

Apache Commons CLI — настройка среды

Настройка локальной среды

Если вы все еще хотите настроить свою среду для языка программирования Java, то в этом разделе вы узнаете, как загрузить и настроить Java на вашем компьютере. Пожалуйста, следуйте инструкциям ниже, чтобы настроить среду.

Java SE находится в свободном доступе по ссылке Скачать Java . Таким образом, вы загружаете версию, основанную на вашей операционной системе.

Следуйте инструкциям для загрузки Java и запуска .exe для установки Java на вашем компьютере. После того, как вы установили Java на свой компьютер, вам нужно будет установить переменные окружения, чтобы они указывали на правильные каталоги установки —

Настройка пути для Windows 2000 / XP

Мы предполагаем, что вы установили Java в каталог c: \ Program Files \ java \ jdk

  • Щелкните правой кнопкой мыши «Мой компьютер» и выберите «Свойства».

  • Нажмите кнопку «Переменные среды» на вкладке «Дополнительно».

  • Теперь измените переменную Path, чтобы она также содержала путь к исполняемому файлу Java. Например, если в настоящий момент путь задан как «C: \ WINDOWS \ SYSTEM32», измените ваш путь на «C: \ WINDOWS \ SYSTEM32; c: \ Program Files \ java \ jdk \ bin».

Щелкните правой кнопкой мыши «Мой компьютер» и выберите «Свойства».

Нажмите кнопку «Переменные среды» на вкладке «Дополнительно».

Теперь измените переменную Path, чтобы она также содержала путь к исполняемому файлу Java. Например, если в настоящий момент путь задан как «C: \ WINDOWS \ SYSTEM32», измените ваш путь на «C: \ WINDOWS \ SYSTEM32; c: \ Program Files \ java \ jdk \ bin».

Настройка пути для Windows 95/98 / ME

Мы предполагаем, что вы установили Java в каталог c: \ Program Files \ java \ jdk

  • Отредактируйте файл «C: \ autoexec.bat» и добавьте в конце следующую строку: «SET PATH =% PATH%; C: \ Program Files \ java \ jdk \ bin»

Отредактируйте файл «C: \ autoexec.bat» и добавьте в конце следующую строку: «SET PATH =% PATH%; C: \ Program Files \ java \ jdk \ bin»

Настройка пути для Linux, UNIX, Solaris, FreeBSD

Переменная среды PATH должна указывать на то, где установлены двоичные файлы Java. Обратитесь к документации по вашей оболочке, если у вас возникли проблемы с этим.

Например, если вы используете bash в качестве оболочки, вы добавили бы следующую строку в конец вашего .bashrc: export PATH = / path / to / java: $ PATH ‘

Популярные редакторы Java

Для написания ваших программ на Java вам нужен текстовый редактор. Есть много сложных IDE, доступных на рынке. Но сейчас вы можете рассмотреть один из следующих —

  • Блокнот — на компьютере с Windows вы можете использовать любой простой текстовый редактор, например Блокнот (рекомендуется для этого урока), TextPad.

  • Netbeans — это Java IDE с открытым исходным кодом, который можно загрузить по адресу https://www.netbeans.org/index.html .

  • Eclipse — это также Java IDE, разработанная сообществом открытого исходного кода eclipse, которую можно скачать по адресу https://www.eclipse.org/ .

Блокнот — на компьютере с Windows вы можете использовать любой простой текстовый редактор, например Блокнот (рекомендуется для этого урока), TextPad.

Netbeans — это Java IDE с открытым исходным кодом, который можно загрузить по адресу https://www.netbeans.org/index.html .

Eclipse — это также Java IDE, разработанная сообществом открытого исходного кода eclipse, которую можно скачать по адресу https://www.eclipse.org/ .

Скачать Common CLI Archive

Загрузите последнюю версию jar-файла Apache Common CLI с commons-cli-1.4-bin.zip . На момент написания этого руководства мы загрузили файл commons-cli-1.4-bin.zip и скопировали его в папку C: \> Apache.

Операционные системы Название архива
Windows commons-cli-1.4-bin.zip
Linux Обще-кли-1,4-bin.tar.gz
макинтош Обще-кли-1,4-bin.tar.gz

Установить Apache Common CLI Environment

Установите переменную окружения APACHE_HOME, чтобы она указывала на местоположение базовой директории, где на вашем компьютере хранится jar-файл Apache. Предполагая, что мы извлекли commons-collections4-4.1-bin.zip в папку Apache в различных операционных системах следующим образом.

Операционные системы Выход
Windows Установите переменную окружения APACHE_HOME в C: \ Apache
Linux экспорт APACHE_HOME = / usr / local / Apache
макинтош экспорт APACHE_HOME = / Библиотека / Apache

Установить переменную CLASSPATH

Задайте переменную среды CLASSPATH, чтобы она указывала на расположение JAR Common CLI. Предполагается, что вы сохранили commons-cli-1.4.jar в папке Apache в различных операционных системах следующим образом.

Операционные системы Выход
Windows Установите для переменной среды CLASSPATH значение% CLASSPATH%;% APACHE_HOME% \ commons-cli-1.4.jar;.;
Linux export CLASSPATH = $ CLASSPATH: $ APACHE_HOME / commons-cli-1.4.jar :.
макинтош export CLASSPATH = $ CLASSPATH: $ APACHE_HOME / commons-cli-1.4.jar :.

Apache Commons CLI — первое приложение

Давайте создадим пример консольного приложения, целью которого является получение либо суммы пропущенных чисел, либо умножения пропущенных чисел на основе используемых опций.

Создайте Java-класс с именем CLITester.

пример

CLITester.java

import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.DefaultParser;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;

public class CLITester {
   public static void main(String[] args) throws ParseException {

      //***Definition Stage***
      // create Options object
      Options options = new Options();

      // add option "-a"
      options.addOption("a", false, "add numbers");

      // add option "-m"
      options.addOption("m", false, "multiply numbers");

      //***Parsing Stage***
      //Create a parser
      CommandLineParser parser = new DefaultParser();

      //parse the options passed as command line arguments
      CommandLine cmd = parser.parse( options, args);

      //***Interrogation Stage***
      //hasOptions checks if option is present or not
      if(cmd.hasOption("a")) { 
         System.out.println("Sum of the numbers: " + getSum(args));
      } else if(cmd.hasOption("m")) {
         System.out.println("Multiplication of the numbers: " + getMultiplication(args));
      }
   }

   public static int getSum(String[] args) {
      int sum = 0;
      for(int i = 1; i < args.length ; i++) {
         sum += Integer.parseInt(args[i]);
      } 
      return sum;
   }

   public static int getMultiplication(String[] args) {
      int multiplication = 1;
      for(int i = 1; i < args.length ; i++) {
         multiplication *= Integer.parseInt(args[i]);
      } 
      return multiplication;
   }
}

Выход

Запустите файл, передав опцию -a в качестве опции и числа, чтобы получить сумму чисел в качестве результата.

java CLITester -a 1 2 3 4 5
Sum of the numbers: 15

Запустите файл, передав в качестве опции -m и числа, чтобы получить умножение чисел в качестве результата.

java CLITester -m 1 2 3 4 5
Multiplication of the numbers: 120

Apache Commons CLI — свойства опций

Объект Option используется для представления опции, переданной в программу командной строки. Ниже приведены различные свойства, которыми обладает объект Option.

Sr.No. Имя (Тип) и Описание
1

opt (Строка)

Идентификационная строка Опциона.

2

longOpt (String)

Псевдоним и более описательная идентификационная строка.

3

описание (строка)

Описание функции опции.

4

требуется (булево)

Флаг, чтобы проверить, должна ли опция отображаться в командной строке.

5

arg (логическое)

Флаг, чтобы проверить, принимает ли опция аргумент.

6

args (логическое)

Флаг, чтобы проверить, принимает ли опция более одного аргумента.

7

optionArg (логическое)

Флаг, чтобы проверить, является ли аргумент опции необязательным.

8

argName (String)

Имя значения аргумента для оператора использования.

9

valueSeparator (char)

Символьное значение, используемое для разделения строки аргумента.

10

тип (объект)

Тип аргумента.

11

значение (строка)

Значение параметра.

12

значения (String [])

Значения опции.

opt (Строка)

Идентификационная строка Опциона.

longOpt (String)

Псевдоним и более описательная идентификационная строка.

описание (строка)

Описание функции опции.

требуется (булево)

Флаг, чтобы проверить, должна ли опция отображаться в командной строке.

arg (логическое)

Флаг, чтобы проверить, принимает ли опция аргумент.

args (логическое)

Флаг, чтобы проверить, принимает ли опция более одного аргумента.

optionArg (логическое)

Флаг, чтобы проверить, является ли аргумент опции необязательным.

argName (String)

Имя значения аргумента для оператора использования.

valueSeparator (char)

Символьное значение, используемое для разделения строки аргумента.

тип (объект)

Тип аргумента.

значение (строка)

Значение параметра.

значения (String [])

Значения опции.

Apache Commons CLI — булева опция

Логическая опция представлена ​​в командной строке своим присутствием. Например, если опция присутствует, ее значение равно true, в противном случае она считается ложной. Рассмотрим следующий пример, где мы печатаем текущую дату, и если присутствует флаг -t, мы также будем печатать время.

пример

CLITester.java

import java.util.Calendar;
import java.util.Date;

import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.DefaultParser;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;

public class CLITester {
   public static void main(String[] args) throws ParseException {
      Options options = new Options();
      options.addOption("t", false, "display time");

      CommandLineParser parser = new DefaultParser();
      CommandLine cmd = parser.parse( options, args);

      Calendar date = Calendar.getInstance();
      int day = date.get(Calendar.DAY_OF_MONTH);
      int month = date.get(Calendar.MONTH);
      int year = date.get(Calendar.YEAR);

      int hour = date.get(Calendar.HOUR);
      int min = date.get(Calendar.MINUTE);
      int sec = date.get(Calendar.SECOND);

      System.out.print(day + "/" + month + "/" + year);
      if(cmd.hasOption("t")) { 
         System.out.print(" " + hour + ":" + min + ":" + sec);
      }
   }
}

Выход

Запустите файл, не пропуская ни одной опции, и посмотрите результат.

java CLITester 
12/11/2017

Запустите файл, передав опцию -t, и посмотрите результат.

java CLITester 
12/11/2017 4:13:10

Apache Commons CLI — опция аргумента

Параметр Аргумент представлен в командной строке своим именем и соответствующим значением. Например, если опция присутствует, то пользователь должен передать ее значение. Рассмотрим следующий пример: если мы печатаем журналы в некоторый файл, мы хотим, чтобы пользователь вводил имя файла журнала с параметром аргумента logFile.

пример

CLITester.java

import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.DefaultParser;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;

public class CLITester {
   public static void main(String[] args) throws ParseException {

      Options options = new Options();

      Option logfile   = Option.builder()
         .longOpt("logFile")
         .argName("file" )
         .hasArg()
         .desc("use given file for log" )
         .build();

      options.addOption(logfile);

      CommandLineParser parser = new DefaultParser();
      CommandLine cmd = parser.parse( options, args);

      // has the logFile argument been passed?
      if(cmd.hasOption("logFile")) {
         
         //get the logFile argument passed
         System.out.println( cmd.getOptionValue( "logFile" ) );
      }
   }
}

Выход

Запустите файл, передав в качестве опции параметр —logFile, в качестве значения параметра укажите имя файла и просмотрите результат.

java CLITester --logFile test.log
test.log

Apache Commons CLI — опция свойств

Опция Свойства представлена ​​в командной строке своим именем и соответствующими свойствами, такими как синтаксис, подобный файлу свойств Java. Рассмотрим следующий пример: если мы передаем такие параметры, как -DrollNo = 1 -Dclass = VI -Dname = Mahesh, мы должны обрабатывать каждое значение как свойства. Давайте посмотрим логику реализации в действии.

пример

CLITester.java

import java.util.Properties;

import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.DefaultParser;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;

public class CLITester {
   public static void main(String[] args) throws ParseException {

      Options options = new Options();

      Option propertyOption   = Option.builder()
         .longOpt("D")
         .argName("property=value" ) 
         .hasArgs()
         .valueSeparator()
         .numberOfArgs(2)
         .desc("use value for given properties" )
         .build();

      options.addOption(propertyOption);

      CommandLineParser parser = new DefaultParser();
      CommandLine cmd = parser.parse( options, args);

      if(cmd.hasOption("D")) {
         Properties properties = cmd.getOptionProperties("D");
         System.out.println("Class: " + properties.getProperty("class"));
         System.out.println("Roll No: " + properties.getProperty("rollNo"));
         System.out.println("Name: " + properties.getProperty("name"));
      }
   }
}

Выход

Запустите файл, передав параметры в виде пар ключ-значение, и посмотрите результат.

java CLITester -DrollNo=1 -Dclass=VI -Dname=Mahesh
Class: VI
Roll No: 1
Name: Mahesh

Apache Commons CLI — Парсер Posix

Парсер Posix используется для разбора Posix как переданные аргументы. Теперь он устарел и заменен DefaultParser.

пример

CLITester.java

import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
import org.apache.commons.cli.PosixParser;

public class CLITester {
   public static void main(String[] args) throws ParseException {
   
      //Create posix like options
      Options posixOptions = new Options();
      posixOptions.addOption("D", false, "Display");
      posixOptions.addOption("A", false, "Act");

      CommandLineParser posixParser = new PosixParser();

      CommandLine cmd = posixParser.parse(posixOptions, args);

      if( cmd.hasOption("D") ) {
         System.out.println("D option was used.");
      }

      if( cmd.hasOption("A") ) {
         System.out.println("A option was used.");
      }
   } 
}

Выход

Запустите файл, передав в качестве опции -D -A, и посмотрите результат.

java CLITester -D -A
D option was used.
A option was used.

Запустите файл, передав опцию —D, и посмотрите результат.

java CLITester --D
D option was used.

Apache Commons CLI — GNU Parser

Анализатор GNU используется для анализа GNU, как переданные аргументы. Теперь он устарел и заменен DefaultParser.

пример

CLITester.java

import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.GnuParser;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;

public class CLITester {
   public static void main(String[] args) throws ParseException {

      //Create GNU like options
      Options gnuOptions = new Options();
      gnuOptions.addOption("p", "print", false, "Print")
         .addOption("g", "gui", false, "GUI")
         .addOption("n", true, "Scale");

      CommandLineParser gnuParser = new GnuParser();
      CommandLine cmd = gnuParser.parse(gnuOptions, args);

      if( cmd.hasOption("p") ) {
         System.out.println("p option was used.");
      }

      if( cmd.hasOption("g") ) {
         System.out.println("g option was used.");
      }

      if( cmd.hasOption("n") ) {
         System.out.println("Value passed: " + cmd.getOptionValue("n"));
      }
   } 
}

Выход

Запустите файл, передав в качестве опции -p -g -n 10, и посмотрите результат.

java CLITester -p -g -n 10
p option was used.
g option was used.
Value passed: 10

Apache Commons CLI — пример использования

Apache Commons CLI предоставляет класс HelpFormatter для печати руководства по использованию аргументов командной строки. Смотрите пример.

пример

CLITester.java

import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;

public class CLITester {
   public static void main(String[] args) throws ParseException {

      Options options = new Options();
      options.addOption("p", "print", false, "Send print request to printer.")
         .addOption("g", "gui", false, "Show GUI Application")
         .addOption("n", true, "No. of copies to print");

      HelpFormatter formatter = new HelpFormatter();
      formatter.printHelp("CLITester", options);
   } 
}

Выход

Запустите файл и посмотрите результат.

java CLITester
usage: CLITester
 -g,--gui     Show GUI Application
 -n <arg>     No. of copies to print
 -p,--print   Send print request to printer.

Apache Commons CLI — пример справки

Apache Commons CLI предоставляет класс HelpFormatter для вывода справки, связанной с аргументами командной строки. Смотрите пример.

пример

CLITester.java

import java.io.PrintWriter;

import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;

public class CLITester {
   public static void main(String[] args) throws ParseException {

      Options options = new Options();
      options.addOption("p", "print", false, "Send print request to printer.")
         .addOption("g", "gui", false, "Show GUI Application")
         .addOption("n", true, "No. of copies to print");

      HelpFormatter formatter = new HelpFormatter();

      final PrintWriter writer = new PrintWriter(System.out);
      formatter.printUsage(writer,80,"CLITester", options);
      writer.flush();    
   } 
}

Выход

Запустите файл и посмотрите результат.