Интерфейс командной строки Apache Commons - Краткое руководство
Интерфейс командной строки Apache Commons - это компоненты Apache Commons, которые являются производными от Java API и предоставляют API для анализа аргументов / параметров командной строки, которые передаются программам. Этот API также позволяет распечатать справку, относящуюся к доступным опциям.
Обработка командной строки состоит из трех этапов. Эти этапы объясняются ниже -
- Стадия определения
- Этап разбора
- Стадия допроса
Стадия определения
На этапе определения мы определяем варианты, которые может использовать приложение, и действовать соответствующим образом. Commons CLI предоставляет класс 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 и о том, как настроить путь к Commons CLI для Windows 2000 / XP, Windows 95/98 / ME и т. Д. Мы также узнаем о некоторых популярных редакторах java и как скачать архив Commons CLI.
Настройка локальной среды
Если вы все еще хотите настроить свою среду для языка программирования Java, в этой главе вы узнаете, как загрузить и установить Java на свой компьютер. Пожалуйста, следуйте инструкциям ниже, чтобы настроить среду.
Java SE находится в свободном доступе по ссылке https://www.oracle.com/java/technologies/oracle-java-archive-downloads.html. Таким образом, вы можете скачать версию, основанную на вашей операционной системе.
Следуйте инструкциям, чтобы загрузить Java и запустить .exe, чтобы установить Java на свой компьютер. После того, как вы установили Java на свой компьютер, вам нужно будет установить переменные среды, чтобы они указывали на правильные каталоги установки.
Путь для Windows 2000 / XP
Мы предполагаем, что вы установили Java в c:\Program Files\java\jdk каталог.
Щелкните правой кнопкой мыши на 'My Computer' и выберите 'Properties'.
Нажми на 'Environment variables' кнопка под 'Advanced' таб.
Теперь измените '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'.
Путь для Linux, UNIX, Solaris, FreeBSD
Переменная среды PATH должна быть установлена в точку, где были установлены двоичные файлы Java. Обратитесь к документации вашей оболочки, если у вас возникли проблемы с этим.
Например, если вы используете bash в качестве оболочки, вы должны добавить следующую строку в конец своего '.bashrc: export PATH = / path / to / java: $ PATH'
Популярные редакторы Java
Для написания программ на Java вам понадобится текстовый редактор. На рынке доступно множество сложных IDE. Но пока вы можете рассмотреть одно из следующих:
Notepad - На компьютере с Windows вы можете использовать любой простой текстовый редактор, например Блокнот (рекомендуется для этого урока), TextPad.
Netbeans- Это Java IDE с открытым исходным кодом и бесплатная загрузка, которую можно загрузить с www.netbeans.org/index.html .
Eclipse- Это также Java IDE, разработанная сообществом разработчиков открытого исходного кода eclipse, которую можно загрузить с www.eclipse.org .
Скачать общий архив CLI
Загрузите последнюю версию 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 | commons-cli-1.4-bin.tar.gz |
Mac | commons-cli-1.4-bin.tar.gz |
Общая среда CLI Apache
Установить APACHE_HOMEпеременная среды, указывающая на расположение базового каталога, в котором на вашем компьютере хранится Apache jar. Предположим, что мы извлекли commonscollections4-4.1-bin.zip в папку Apache в различных операционных системах следующим образом:
Операционные системы | Выход |
---|---|
Windows | Установите для переменной среды APACHE_HOME значение C: \ Apache |
Linux | экспорт APACHE_HOME = / usr / local / Apache |
Mac | экспорт APACHE_HOME = / Библиотека / Apache |
CLASSPATH Переменная
Установить CLASSPATHпеременная среды, указывающая на расположение jar-файла Common CLI. Предположим, что вы сохранили commons-cli-1.4.jar в папке Apache в различных операционных системах следующим образом:
Операционные системы | Выход |
---|---|
Windows | Хранит ботов AIML. </ Установите для переменной среды CLASSPATH значение% CLASSPATH%;% APACHE_HOME% \ commons-cli-1.4.jar;.; |
Linux | экспорт CLASSPATH = $ CLASSPATH: $ APACHE_HOME / commons-cli-1.4.jar :. |
Mac | экспорт CLASSPATH = $ CLASSPATH: $ APACHE_HOME / commons-cli-1.4.jar :. |
Давайте создадим образец консольного приложения, целью которого является получение суммы переданных чисел или умножения переданных чисел в зависимости от используемых параметров.
Создайте класс 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
Объект Option используется для представления параметра, переданного программе командной строки. Ниже приведены различные свойства, которыми обладает объект Option.
Старший Нет | Имя (Тип) & s; Описание |
---|---|
1 |
opt (String) Строка идентификации Опциона. |
2 |
longOpt (String) Псевдоним и более информативная идентификационная строка. |
3 |
description (String) Описание функции опции. |
4 |
required (boolean) Отметьте, чтобы проверить, должен ли параметр отображаться в командной строке. |
5 |
arg (boolean) Флаг, чтобы проверить, принимает ли опция аргумент. |
6 |
args (boolean) Отметьте, чтобы проверить, принимает ли опция более одного аргумента. |
7 |
optionalArg (boolean) Флаг, чтобы проверить, является ли аргумент опции необязательным. |
8 |
argName (String) Имя значения аргумента для оператора использования. |
9 |
valueSeparator (char) Значение символа, используемое для разделения строки аргумента. |
10 |
type (Object) Тип аргумента. |
11 |
value (String) Значение опции. |
12 |
values (String[]) Стоимость опции. |
Логическая опция представлена в командной строке своим присутствием. Например, если опция присутствует, то ее значение истинно, в противном случае она считается ложной. Рассмотрим следующий пример, где мы печатаем текущую дату и присутствует флаг -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
Параметр «Аргумент» представлен в командной строке своим именем и соответствующим значением. Например, если опция присутствует, пользователь должен передать ее значение. Рассмотрим следующий пример, если мы печатаем журналы в некоторый файл, для которого мы хотим, чтобы пользователь вводил имя файла журнала с параметром аргумента 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
Параметр «Свойства» представлен в командной строке своим именем и соответствующими свойствами, такими как синтаксис, который аналогичен файлу свойств 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
Парсер 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.
Парсер 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 предоставляет класс 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 предоставляет класс 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();
}
}
Выход
Запустите файл и посмотрите результат.
java CLITester
usage: CLITester [-g] [-n <arg>] [-p]